天道酬勤,学无止境

我真的,真的想要一个关闭按钮来终止 Android 应用程序(I really, really want a close button to terminate the Android application)

问题

我想创建一个名为“忠诚卡”的非常简单的 Android 应用程序,以在电话屏幕上显示我的食品店的条形码图像。 食品店结账处的条形码阅读器可以看到这张图片并认出我。 我已经测试了这个概念,它似乎工作得很好。

但是,由于我每周只访问食品店,因此没有理由在扫描条形码后让应用程序在后台运行(甚至空闲)。 一旦我签出,结束、终止、消灭应用程序对我来说似乎是明智的。 我认为一个理性的用户会看到有一个“关闭”按钮来做到这一点的价值。

通过在应用程序 XML 中使用 onClick 并在 Java 方法中使用 finish() ,我设法让关闭按钮从它出现的地方返回。 (我的意思是,如果应用程序是通过快捷方式从主屏幕启动的,那么我的关闭按钮将返回主屏幕。如果应用程序是从应用程序抽屉启动的,则关闭按钮将返回应用程序抽屉。)在任何一种情况下,应用程序列表仍然包含正在运行/空闲的应用程序。 我真的,真的希望应用程序结束,停止,自毁,可以这么说。

在阅读有关此主题的内容时,我认识到许多人认为这种尝试使用按钮关闭应用程序不是一个好习惯。 但是对于这个特定的用例,用户可能不想在下周他/她购买食物之前再次提取条形码。

  • 以我的拙见,我希望用户能够单击关闭按钮(一个步骤)并使应用程序本身完全停止。

  • 另一种方法是让用户点击后退按钮(或主页),然后点击应用程序列表按钮,也许滚动到许多正在运行的其他正在运行的应用程序,然后向右滑动以手动停止应用程序(四个步骤)。

我不了解你,但我通常有一长串正在运行的应用程序,看到一个额外的未使用的应用程序是一种麻烦。 特别是因为在这个用例中,用户一周内不太可能再次看到该条码。

话虽如此,我承认我是 Java 编程的新手,更不用说为 Android 平台编程了。 我想要一个关于如何重写下面显示的 Java 代码的建议,以便 closeIt 方法完全和绝对地破坏自身和(我在这里猜测)主进程。

这是我根据搜索此主题编写的 Java 代码:

package com.example.loyaltycard;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    /* Close the application without leaving it in the activity list */
    public void closeIt (View view) {
        finish();
        return;
    }
}

与此 Java 代码一起使用的 XML 如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.loyaltycard.MainActivity">
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/barcodeimage" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal= "true"
        android:onClick="closeIt"
        android:text="Close" />
</RelativeLayout>

最后,提前感谢您允许我写一个长而详细的问题。 我希望我们可以避免讨论这是否是一个好的做法。 相反,我想找到一个解决方案。 我保证不仅要剪切/粘贴您的想法,还要研究为什么您的建议应该有效。 所以,你知道,我真的向你学习。

编辑:我使用 Android Studio 作为开发环境,我认为这可能会使情况复杂化。

回答1
  public void closeIt (View view) {
        //super.finish();
        finish();
        android.os.Process.killProcess(android.os.Process.myPid());
        System.exit(1);
        return;
    }

更新:如果您有 10,20 个多个活动正在运行,并且您想完成所有活动并退出系统。

application classconstants class.创建一个静态数组constants class.

常数

public class Constants {

public static ArrayList<Activity> activities = new ArrayList<Activity>();

}

MainActivity在此数组中添加当前活动引用

activity = MainActivity.this; Constants.activities.add(activity);

public class MainActivity extends Activity {

    private ImageView ImageButton;
    private Activity activity;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        activity = MainActivity.this;
        Constants.activities.add(activity);

        ImageButton = (ImageView) findViewById(R.id.camera);
        ImageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // existing app.
                if (Constants.activities != null) {
                    for (int i = 0; i < Constants.activities.size(); i++) {
                        Activity s = Constants.activities.get(i);
                        s.finish();
                    }
                }
                //super.finish();
                finish();
                android.os.Process.killProcess(android.os.Process.myPid());
                System.exit(1);
            }
        });
    }
}
回答2

在关闭按钮中使用finishAffinity()而不是finish()

(注:Android 4.1+)

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 退出应用程序会感到皱眉吗?(Is quitting an application frowned upon?)
    问题 继续尝试学习Android,我读了以下内容: 问题: 答:(Roman Guy): 呵呵,我在Android世界中迈出的每一步都会遇到某种问题=( 显然,您无法在Android中退出应用程序(但是Android系统可以在需要时完全销毁您的应用程序)。 那是怎么回事? 我开始认为不可能编写一个功能像“普通应用程序”的应用程序-用户可以在决定退出应用程序时退出该应用程序。 那不是应该依靠操作系统来做的事情。 我尝试创建的应用程序不是适用于Android Market的应用程序。 它不是公众“广泛使用”的应用程序,而是将在非常狭窄的业务领域中使用的商业应用程序。 实际上,我真的很期待开发Android平台,因为它解决了Windows Mobile和.NET中存在的许多问题。 但是,上周对我来说是个休假……我希望我不必放弃Android,但现在看起来还不太好=( 我有办法真正退出该应用程序吗? 回答1 这最终将解决您的问题,但是我首先想解决您在撰写本文时已经给出的各种答案的各种评论中提出的一些问题。 我无意改变您的想法-相反,这些是供将来阅读此帖子的其他人使用的。 关键是我不能允许Android确定何时终止我的应用程序。 那必须是用户的选择。 数以百万计的人对环境根据需要关闭应用程序的模型感到非常满意。 这些用户根本不会考虑“终止” Android应用程序,而只是考虑“终止”网页或
  • 关闭Android应用[重复](Close Android Application [duplicate])
    问题 这个问题已经在这里有了答案: 退出应用程序会感到皱眉吗? (40个答案) 7年前关闭。 请提出如何用一行代码关闭整个Android应用程序的建议。 回答1 是-为什么,然后如何(多种): 简短答案: System.exit(0); 这很好地干净地终止了专用于运行该应用程序的整个java机器。 但是,您应该从主要活动中执行此操作,否则android可能会自动重新启动您的应用。 (在Android 7.0上进行了测试) 为什么这是一个好问题的详细信息和解释,程序员可能有一个非常合理的理由以这种方式终止其应用程序: 我真的没有看到与正在寻求终止其应用程序的人严厉交谈的好处。 Good是对初学者的友好提醒,在Android上,您不必担心关闭应用程序的麻烦-但有些人实际上确实想终止其应用程序,即使他们知道自己不必这样做-以及他们的问题这样做是一个带有有效答案的合法问题。 也许许多人生活在理想的世界中,却没有意识到在真实世界中,真实的人们正在努力解决实际的问题。 事实是,即使使用android,它仍然是一台计算机,并且该计算机仍在运行代码,并且完全可以理解为什么有人希望真正退出其“应用程序”(即,属于该应用程序的所有活动和资源) ) 确实,Google的开发人员设计了一个系统,他们认为没有人需要退出他们的应用程序。 也许99%的时间他们是对的! 但是
  • 区分Android杀死应用程序和用户在最近的应用程序列表中将其刷掉(Differentiate between Android killing the app and user swiping it off on the recent apps list)
    问题 我正在处理一个项目,在进行特定活动时,我们会显示本地粘性通知。 当应用程序最小化时也应该如此。 我必须完成的是在应用程序被终止时删除本地通知(由 Android,由于内存不足或由用户,从最近的应用程序列表中滑动)。 通常,每当 Android 使用 Activity 打开一些空间时,就会调用onDestroy 。 在其中一种情况下这很好,但是从最近的应用程序列表中滑动应用程序不会调用onDestroy并且粘性通知会保留。 我所做的是,我实现了一个空服务,它会在应用程序被onDestroy (滑动和系统onDestroy时强制onDestroy ,这样我就可以删除我的通知。 但是,我想做的是区分滑动和系统终止。 这甚至可能吗? 回答1 通常,如果 Android 想要终止您的应用程序,因为它在后台运行时间过长(或者因为它想要回收资源),Android 只会简单地终止托管您的应用程序的操作系统进程。 它不会在任何活动或服务组件上调用finish()或onDestroy() 。 “从最近的任务列表中滑动”的行为随着时间的推移而改变,并且在不同的 Android 版本中有所不同。 有人应该为此写一本书:-( 回答2 您可以通过向您的应用程序添加服务并实施onTaskRemoved方法来检查用户何时滑动关闭应用程序:https: onTaskRemoved 回答3 这是我在
  • 按下“后退”按钮时完成所有活动(Finish all activities when back button is pressed)
    问题 我有一个具有3个活动的android应用程序。 对于第一个和第二个活动,我希望返回按钮退出所有现有活动。 当前后退按钮正在退出其启动的活动,但是如果按下第二个活动,则将显示第一个活动,而不是在第一个活动进入第二个活动时退出应用程序。 我需要此功能的原因是因为第1和第2活动使用了计时器计时器,当我想要按下HOME按钮时,计时器将继续运行。 但是我需要一种方法来重置计时器,以便使用“后退”按钮完全退出应用程序。 这是我在第一个和第二个活动中都存在的后退按钮的代码。 @Override public void onBackPressed() { // method for exit confirmation AlertDialog.Builder builder = new AlertDialog.Builder(BreakActivity.this); builder.setMessage("Are you sure you want to exit?") .setCancelable(false) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { BreakActivity.this
  • 真的可以关闭PhoneGap App吗?(Is it really posible to close a PhoneGap App?)
    问题 我在整个网络上搜索并找到了关闭 PhoneGap 应用程序的不同方法。 我测试了所有这些,但没有任何效果。 至少在安卓上。 题: 是否有可能(到 2014 年 2 月)在 Android 上的 PhoneGap 应用程序中有一个关闭按钮? 谢谢 这不起作用: function CloseApp() { if (confirm('Close this App?')){ if (navigator.app) { navigator.app.exitApp(); }else if (navigator.device) { navigator.device.exitApp(); } } } 回答1 是 navigator.app.exitApp() 真的用phonegap杀死/关闭Android应用程序吗? 我使用cordova并且有同样的问题。 上面提到的代码只是将应用程序置于后台 - 在应用程序执行上述代码后,我检查了正在运行的任务(android 任务管理器)。 回答2 我很困惑为什么你想要一个按钮来关闭应用程序。 当用户点击足够多的次数时,Android 已经有一个返回按钮,可以将用户带回手机的主屏幕。 还有一个主页按钮可以将用户带出应用程序。 一次,在应用程序之外,用户可以通过任务管理器“杀死”应用程序。 回答3 navigator.app.exitApp() 工作
  • Android中静态变量的生命周期(Lifetime of a static variable in Android)
    问题 当我在主活动中将变量声明并初始化为static时,活动被销毁。 我仍然可以访问变量的内容吗? 例如,要始终访问我存储到此变量的AsyncTask? 我想要的是在方向更改后也能够访问它。 回答1 静态变量与类相关联,并且只要该类在内存中,它们就会存在,并且在类卸载时销毁(这很少发生)。 在Android中,您已经看到,当我们关闭任何应用程序时,它不会完全关闭,而是保留在最近的应用程序堆栈中,您可以通过按住home按钮(在大多数设备上)来查看。 当其他应用需要内存时,Android本身会淘汰那些最近的应用 回答2 如果该进程被终止,则所有静态变量都将重新初始化为其默认值。 这主要是因为,当您重新启动应用程序时,将创建一个新实例,并且静态变量将被重新初始化。 回答3 我仍然可以访问变量的内容吗? 假设“销毁”是指用户按BACK,是的。 静态数据成员在该过程的生命周期中一直存在。 例如,要始终访问我存储到此变量的AsyncTask? 我想要的是在方向更改后也能够访问它。 那不是一个合适的解决方案。 使用保留的片段,或使用onRetainNonConfigurationInstance()。 回答4 静态变量与类本身联系在一起。 只要该类在内存中,变量就会被保留。 当类生活在所谓的Permanent Generation内存空间中时,它们很少会被垃圾收集
  • 如何模拟Android杀死我的进程(How to simulate Android killing my process)
    问题 如果Android在后台运行,并且OS决定需要资源(RAM,CPU等),则Android将终止该进程。 我需要能够在测试期间模拟此行为,以便可以确保我的应用程序行为正确。 我希望能够以自动化的方式执行此操作,以便可以在每次发生这种情况时测试应用程序是否正常运行,这意味着我将必须在每个活动中进行测试,等等。 我知道如何终止我的程序。 那不是问题。 问题是,当我杀死进程(使用DDMS, adb shell kill , Process.killProcess()等)时,Android不会以与Android OS自身杀死它相同的方式重新启动它。 如果Android OS终止了该进程(由于资源需求),则当用户返回到应用程序时,Android将重新创建该进程,然后在活动堆栈上重新创建最上面的活动(调用onCreate() )。 另一方面,如果我终止了该进程, Android会认为该活动堆栈顶部的活动行为不佳,因此它会自动重新创建该流程,然后从该活动堆栈中删除该顶部活动,并重新创建下方的活动顶级活动(调用onCreate()`)。 这不是我想要的行为。 我想要的行为与Android终止进程的行为相同。 仅以图形方式进行说明,如果我的活动堆栈如下所示: ActivityA -> ActivityB -> ActivityC -> ActivityD 如果Android终止了该进程
  • 当应用程序的所有活动完成时会发生什么?(What happens when all activities of an application finishes?)
    问题 设想: 我的 Android 应用程序中有四个活动,比如说 A、B、C 和 D。应用程序中有一个Constants.java类,它扩展了Application类以维护全局应用程序状态。 Constants 类具有应用程序的所有常量变量。 活动流程是这样的A-->B-->C-->D 。 当从活动 A 按下后退按钮时,我正在调用 finish() 方法,该方法将完成活动 A 并关闭应用程序。 之后,如果我从所有应用程序中打开应用程序, Constants.java有一个变量,其值从上次启动后一直存在。 当我从活动 A 执行System.exit(10)然后是Process.killProcess(Process.myPid())时,不会发生同样的事情(背压)。 问题: 通过调用每个活动的 finish() 完成所有活动是否会关闭应用程序(其进程)? 即使变量的所有活动都完成(关闭),它的值如何保持? 调用System.exit(10)然后调用Process.killProcess(Process.myPid())退出应用程序是否公平? 更新: 如何在退出应用程序时清除应用程序常量(HomeActivity 的后退键)? 回答1 1) 不,Android 不保证如此。 由操作系统决定是否终止进程。 2)因为Activity实例仍然存在于Dalvik VM中。 在 Android 中
  • 亚行没有响应 - Android Studio(ADB Not Responding - Android Studio)
    问题 不要将此标记为重复。 让我解释一下出了什么问题,并告诉你我做了什么。 所以这是我的问题。 当我打开 Android Studio 时,它给了我这样的错误: 然后我去了我的 Windows 防火墙设置。 这是我所拥有的: 如您所见,防火墙已关闭。 然后,我转到我的防病毒安全程序并关闭那里的设置: 正如您在此处也看到的,我禁用了智能防火墙。 然后,我再次打开 Android Studio。 我在这里也遇到了同样的错误。 我按下了确定按钮并继续前进。 然后,Android Studio 加载完毕。 之后,ADB 开始加载。 这是真正的错误发生的地方。 我也用 Eclipse 尝试过,但它也说 ADB 没有响应。 在过去一个月左右的时间里,Android Studio 一直运行良好。 我以前从未在 Android Studio 中收到过这些错误或警告消息,所以这对我来说是新的。 这是我尝试过的: 在 cmd 中, adb kill-server然后我按下了 ADB 上的重启按钮没有响应消息重启电脑在我的 Nexus 5 上打开和关闭 USB 调试 所以,我真的找不到解决办法。 任何有关此问题的帮助将不胜感激。 回答1 有时它只会陷入混乱。 关闭您的 ide,然后转到进程并终止所有 adb 进程。 然后,当您打开 android studio 时,它应该再次启动 adb
  • Android 应用程序的 main() 函数的最佳等价物是什么?(What is the best equivalent of a main() function for an Android app?)
    问题 我到处搜索了一种在 Android 应用程序中具有等效于 main() 函数(是函数不是方法)的方法,但失败了...... 通常我想做的是: void main() { // do some really nice initialisations stuff here // ... let the app does his life, I really don't care // do some final stuff here before leaving } 到目前为止,我见过的最接近的方法是使用 SplashScreen 并覆盖 OnCreate() 方法。 问题是从我的角度来看这是不可接受的。 为什么? 因为 SplashScreen 只不过是一个标记为 LAUNCHER 的活动。 这使它出现在应用程序列表中,这是我在开发应用程序小部件时不想要的。 此外,在应用程序销毁之前将我的代码放在哪里? 在 onDestroy() 方法中? 不,再一次,这不可靠。 当应用程序仍在运行时,Android 可以决定删除我的实例。 嗯,事实上,我的原则是我的应用程序的每个组件都在同一个进程中运行,因为我没有在清单中明确提到我不想让一个组件在自己的进程中运行。 对于应用小部件,我已将初始化代码放在 onUpdate() 方法的第一次调用中。 我认为这是一个很好的赌注。
  • 防止C#应用程序被进程杀死(Prevent C# app from process kill)
    问题 如何保护我的C#应用​​程序,防止有人通过Taskman或以编程方式杀死C#应用程序? 这是我的情况: App A是另一个团队开发的MFC应用程序。 它具有未发布的基于文本的远程接口,该接口可通过后门启用。 我正在开发应用程序B,它是一个与A交互的C#WinForms应用程序。当需要远程访问时,B启用A的后门。 我正在探索用户滥用B的方式以获取对A的隐藏功能的访问权,例如在启用A的远程接口后杀死B的进程。 我想最后一次让B关闭A的后门的机会。 B使用本地主机与A进行交互,因此我不担心掉电情况。 我正在寻找不涉及更改A的解决方案。 我不希望能够阻止Dark Tangent(尽管那将是一个好处),但是现在脚本小子可以采用这种设计:) 这些应用程序可在Windows XP上运行,但很快也会支持Vista&7。 预先感谢,吉姆 回答1 您不能-只要用户有权在您的程序上调用TerminateProcess,就不能阻止End Process在任务管理器中立即杀死您。 雷蒙·陈(Raymond Chen)前段时间在此发布:程序与用户之间的军备竞赛 回答2 当他们尝试时,我愿意关闭该应用程序,但需要先做一些事情。 在关闭程序时具有必要的步骤会导致易碎的程序容易中断。 即使您可以阻止某人通过任务管理器杀死程序,也无法阻止他们关闭计算机,甚至不能将电缆拔出墙壁。 任何至关重要的任务都将丢失。
  • 是否真的需要在程序退出时释放对象?(Is Object Releasing on Program Exit Really Needed?)
    问题 是否需要在程序退出/关闭时释放对象? 换句话说,让我们为了争论起见,您有一个按钮可以关闭您的应用程序,但是在您关闭之前显示一个图像,然后您关闭了应用程序。 您是否需要在关闭应用程序之前释放该图像视图? 程序退出时内存会自动释放,或者如果你不释放它,内存会以某种方式保持“活动”状态? 我知道你“应该”发布它,我的问题是关于它的技术方面,以及幕后发生的事情。 回答1 这不是必需的。 但是,如果您正在使用valgrind或类似工具,您很快就会发现,让所有悬空的内存都充满了错误警告。 在 Linux 方面,堆是使用sbrk系统调用增长的。 这一次将整个处理器内存空间增加一个大块(因此只需要一个sbrk即可为许多malloc提供足够的空间)。 当进程消失时,内核会回收sbrk分配的所有内存。 这就是为什么你是安全的。 内核还将关闭由该进程打开的任何文件描述符。 有一些问题可能会出现。 如果您的进程在不合时宜的时刻fork s,则任何打开的文件描述符都将被复制。 我已经看到这表现为一个 TCP 连接在原始进程死亡后神秘地挂起,这很糟糕。 此外,还有其他资源不是进程范围的,因此当进程终止时它们不会被回收。 这包括共享内存段、临时文件、命名管道和 UNIX 套接字,可能还有大量其他 IPC 机制。 总之? 内存没问题。 文件描述符通常很好。 如果不清理,一些更深奥的 IPC 功能将被严重破坏
  • 如何以编程方式“重新启动” Android应用程序?(How do I programmatically “restart” an Android app?)
    问题 首先,我知道不应真正终止/重启Android上的应用程序。 在我的用例中,我想在服务器向客户端发送一条特定信息的特定情况下,将应用程序恢复出厂设置。 用户只能使用一个应用程序实例登录到服务器上(即,不允许使用多个设备)。 如果另一个实例获得了“登录”锁,则该用户的所有其他实例都必须删除其数据(恢复出厂设置),以保持一致性。 可能会强行获得该锁,因为用户可能会删除该应用并重新安装它,这将导致生成不同的实例ID,并且用户将无法再释放该锁。 因此,有可能强行获得锁。 由于这种可能性,我们需要始终在具体实例中检查它是否具有锁。 这几乎是在对服务器的每个请求上完成的。 服务器可能会发送“错误的锁ID”。 如果检测到该错误,则客户端应用程序必须删除所有内容。 那是用例。 我有一个Activity A,它根据sharedPrefs值启动登录Activity L或应用程序的主要Activity B。 启动L或B后,它会自行关闭,因此只有L或B在运行。 因此,在用户已登录的情况下,B现在正在运行。 B启动C。C为IntentService D调用startService 。这将导致此堆栈: (A)> B> C> D 从D的onHandleIntent方法将事件发送到ResultReceiverR。 R现在通过为用户提供一个对话框来处理该事件,在该对话框中,他可以选择工厂重置应用程序(删除数据库
  • 在关闭应用程序并检索该数据时保存数据(Saving data upon closing app and retrieving that data)
    问题 我知道,关于在此处保存/检索数据有很多问题。 我一直在寻找自己的东西,真的以为我可以找到自己的答案而不必“问一个问题”,但是我开始想知道这里还没有找到答案的问题。 我的情况: 自然,我正在制作一个应用程序。 关闭应用程序后,我想保存一个简单的数字数组(0或1)或布尔值。 启动应用程序后,我要搜索该数组(如果存在),并检索该数组以在应用程序内使用。 我开始将代码放入使用数组的活动中。 但是,我开始怀疑是否必须将覆盖的onStop()函数复制/粘贴到我的所有活动中? 还是在主要活动中做到这一点,并以某种方式链接其他活动。 基本上,无论应用程序在关闭时当前处于什么状态/活动,我都希望能够保存int / bool数组并在应用程序启动时将其打开以备份。 也许我不知道如何搜索我想要的东西,所以解释它似乎是正确的选择。 我不介意进行更多搜索,但是如果有人至少将我指向正确的方向,我将不胜感激。 编辑:如果有比我描述的更好的方法来做我想要的事情(例如,使用不同的状态而不是onStop() ),请随意提出想法。 这是我第一次真正必须处理活动的生命周期,即使在浏览了android开发教程之后,我还是有些困惑。 我真的认为他们在大多数情况下做得不好。 回答1 当您的应用程序需要保存一些持久性数据时,应始终使用onPause()方法而不是onStop() 。 因为如果android OS杀死了您的进程
  • Android Beacon 库真的支持后台扫描吗?(Does Android Beacon Library really support background scanning?)
    问题 我正在使用 Android Beacon 库进行 BLE 扫描示例。 它在前景中可以很好地进行监控和测距。 但是,对于后台,它仅适用于在应用程序中按“主页”并关闭屏幕的情况。 当我从任务切换器杀死应用程序时,它不起作用。 在这个例子中,我找不到像 Service 这样的东西来让事情在后台工作。 问题: 如果应用在任务切换器中被杀死,Android Beacon 库是否支持后台扫描? 如果是这样,如何做到这一点? 有什么例子吗? 回答1 我使用 android iBeaon 库进行后台扫描,我创建了一个服务,并在服务中定义了监控和测距。 当应用程序被分发并且它对我有用时,我会启动该服务。 创建这样的新服务。 public class Beaconservice extends Service implements IBeaconConsumer { private ArrayList<IBeacon> arrayL = new ArrayList<IBeacon>(); private BeaconServiceUtility beaconUtill = null; private IBeaconManager iBeaconManager = IBeaconManager.getInstanceForApplication(this); private Handler
  • 如何终止 Xamarin 应用程序?(How to terminate a Xamarin application?)
    问题 如何从任何活动中终止 Xamarin 应用程序? 我已经尝试过System.Environment.Exit(0)和System.Environment.Exit(1)以及Finish()并杀死所有活动。 它仍然打开一个带有默认活动名称和黑屏的空白页面。 对此有什么具体的解决方案吗? 回答1 如果您使用 Xamarin.Forms 创建一个依赖服务。 界面 public interface ICloseApplication { void closeApplication(); } Android :使用FinishAffinity()不会重新启动您的活动。 它将仅关闭应用程序。 public class CloseApplication : ICloseApplication { public void closeApplication() { var activity = (Activity)Forms.Context; activity.FinishAffinity(); } } IOS :正如上面已经建议的那样。 public class CloseApplication : ICloseApplication { public void closeApplication() { Thread.CurrentThread.Abort(); } } UWP public
  • android 中的捆绑包是否永久保存活动状态?(Are the bundles in android permanent in saving activity states ?)
    问题 当我想保存活动的一些状态行为时,文档说我们应该实现 OnSaveInstanceState 和 OnReceiveInstanceState。 他们说即使在销毁或重新启动后,这也会保存活动状态。 我更关心销毁(活动完全消失),这是否意味着捆绑包被认为是持久的? 当我打开一个 pdf 阅读器,关闭它并再次打开它时,我看到它在我所在的同一页面中打开。这是使用 Bundles 还是其他实现的 回答1 您可以八九不离十考虑SavedInstanceState()永久性,但不建议将其用于持久地保存应用程序相关的数据,因为它是不能保证被调用,因此不推荐由作者自己。 因此,仅将它们用于保存用户界面状态更改(背景颜色、当前选定的项目等)并使用其他方法进行持久化,例如:SharedPreferences、Files 和 SQLite。 回答2 要存储持久的应用程序数据,请使用Shared Preferences 。 共享首选项只是持久存储的数据值集。 通过持久性,我们谈论的是跨应用程序生命周期事件持久化的数据。 换句话说,应用程序(或设备,就此而言)可以在不丢失数据的情况下启动和停止。 下次用户启动应用程序时,该数据仍然可用。 例如,某些游戏使用共享首选项来存储所达到的游戏级别、玩家姓名……请参阅此链接以了解如何使用 Android Preference API
  • 为什么调用Process.killProcess(Process.myPid())是一个坏主意?(Why is calling Process.killProcess(Process.myPid()) a bad idea?)
    问题 我读过一些文章,指出使用此方法“不好”,不应使用,这不是“关闭”应用程序的正确方法,也不是Android的工作方式... 我理解并接受这样的事实,即在适当的时候终止进程,Android操作系统比我更了解我,但是我还没有听到很好的解释,说明为什么使用killProcess()方法是错误的。 毕竟-它是Android API的一部分。 我所知道的是,在其他线程正在执行潜在的重要工作(文件操作,写入数据库,HTTP请求,运行服务等)时调用此方法会导致线程终止,这显然不好。 另外,我知道我可以从以下事实中受益:“重新打开”应用程序将更快,因为从上次使用该应用程序以来,系统仍将“保持”状态保持在内存状态,而killProcess()可以防止这种情况的发生。 除此之外,假设我没有这样的操作,并且我不在乎我的应用程序是否每次打开应用程序都会从​​头开始,还有其他原因为什么我不应该使用killProcess()方法? 我知道用于结束Activity的finish()方法,因此请不要在答案中包含该方法。 finish()仅适用于Activity ,不适用于所有应用程序,我想我确切地知道为什么以及何时使用它。 还有一件事-我正在使用Unity3D框架开发游戏,并将该项目导出到Android。 当我对生成的apk进行反编译时,我很惊讶地发现,使用Process.killProcess
  • 在 Eclipse 中重新启动应用程序(Restart an application in Eclipse)
    问题 我正在使用 Eclipse Juno 开发一个独立的服务器(不是战争)。 我将它作为 Eclipse 中的 Java 应用程序运行。 在我进行了一些代码更改后,我想停止当前正在运行的服务器并重新启动它。 我每天这样做几十次。 我现在这样做的方式如下: - 转到“调试”选项卡。 - 选择服务器进程。 - 单击停止进程图标(红色方块)。 - 单击绿色箭头重新运行上次运行的应用程序。 - 返回“Java”选项卡。 有没有更快的方法? 理想情况下,我想要一个按钮或键盘快捷键,可以一键停止和重新启动应用程序。 如果它不存在,我可以以某种方式扩展 Eclipse 吗? 我应该在哪里寻找这样的例子? 回答1 您可以通过在调试窗口中右键单击它并选择“终止并重新启动”来重新启动正在运行的应用程序。 并使用 Ctrl+F8 快速切换视图之间 此外,如果您已经从控制台终止了应用程序,则只需按 ctrl + f11 如果您真的想要,您还可以添加自定义快捷方式以通过 Window -> Preferences -> General -> Keys -> 找到“Terminate and Relaunch”并选择您喜欢的组合键! 回答2 Eclipse Neon.1 添加了一种在重新启动前通过按住 Shift 键并单击启动历史记录项来终止的方法。 您还可以通过在首选项 › 运行/调试 › 启动中启用选项
  • Android 不会保存活动的当前状态(Android wont save the current state of an activity)
    问题 我正在尝试按照此处的示例在我的活动的 onSaveInstanceState(Bundle) 方法中保存一些值:使用保存实例状态保存 Android 活动状态 但它似乎没有从 Oncreate() 加载它。 捆绑对象始终为空,但每当我调用另一个活动时,它确实会进入 onSaveInstanceState 方法来保存我的值。 现在我阅读了我刚刚发布的那个问题,有人注意到他们如何无法在模拟器中运行它? 不幸的是,这就是我的全部工作。 在模拟器上并且无法在设备上测试应用程序,因为我现在没有可用的设备而且我正在与之交互的 Web 服务位于我的工作机器上的本地 VM 中,目前无法远程访问。 我的问题是,保存的包在模拟器上不起作用是真的吗? 我还注意到当我关闭或启动新活动时,该活动如何调用 onPause,然后调用 onStop。 当我带回相同的活动时,它会直接转到 onCreate? 现在根据这里的文档 http://developer.android.com/guide/topics/fundamentals.html#actlife 就生命周期图显示的内容而言这是正确的,但如果您在 onStop() 部分阅读该图下方的内容说它进入的下一步是 onRestart() 或 onDestroy()? 没有提到onCreate? 在文档上输入? 无论如何,这是我的