我正在寻找一种方法来关闭Android应用程序一段时间后应用程序还没有成为焦点。例如,如果用户打开另一个应用程序,应用程序应在5分钟后退出。我尝试过使用runnable并创建一个线程。但是当应用程序处于后台时,这些方法似乎不起作用(可能它们暂停我不确定)。那么如何在关注应用程序时关闭它?
对于那些奇怪我想要这样做的人来说,这个应用程序包含一些关于用户的敏感数据,因此我想确保在他们没有使用它时全部清除。
答案 0 :(得分:1)
这样的事可能有用:
活动类内的字段:
private Thread t = null;
内部onResume()
:
if(t!=null) {
if(t.isAlive()) {
t.interrupt();
t.join();
}
t=null;
}
内部onPause()
:
t = new Thread() {
public void run() {
try {
sleep(5*60*1000);
// Wipe your valuable data here
System.exit(0);
} catch (InterruptedException e) {
return;
}
}.start();
}
答案 1 :(得分:0)
获取应用程序的进程ID,并终止该进程onDestroy()方法
@Override
public void onDestroy()
{
super.onDestroy();
int id= android.os.Process.myPid();
android.os.Process.killProcess(id);
}
参考 - how to close/stop running application on background android
编辑 - 与AlarmManager一起使用
答案 2 :(得分:0)
我建议在finish()
或onPause()
回调中调用onStop()
。 TimerTask
无法生存onPause()
,并且面值不会显示服务,以便为您提供选项。也许你可以启动服务,睡眠服务运行的线程,然后在睡眠定时器到期后终止你的应用程序。
或者,您可以实施一些安全库来帮助保护其他应用程序的数据安全。
Here是Google服务链接。
答案 3 :(得分:0)
您尝试执行的操作的根本问题在于,当Activity
在后台“运行”时,它可能根本不存在于内存中。 Android框架可能已经破坏了活动实例甚至它正在运行的进程。所有存在的可能是您在onSaveInstanceState(...)
中保存的持久状态以及最近应用列表的屏幕截图。你可能没有任何东西可以参考和杀死。
finish()
中致电onPause()
Frank Brenyah's suggestion会阻止您的活动在后台运行,但这是您可以获得所需内容的最接近的活动。您可能只想在isChangingConfigurations()
为false时执行此操作。但即使您的所有应用程序的活动都已完成,Android也可以保留该过程并Application
实例,以避免以后重新创建它们。因此,您可能还希望使用Bhush_techidiot's suggestion来终止该过程。在onPause()
中执行此操作,因为可能会在未调用onDestroy()
的情况下销毁活动。