我正在寻找一种方法来关闭一个安卓应用程序一段时间后,而应用程序没有在焦点。例如,如果用户打开了另一个应用程序,该应用程序应该在5分钟后退出。我试过使用可运行的并创建一个线程。但这些方法似乎不工作,而应用程序是在后台(也许他们是暂停,我不确定)。那么,当它不在焦点中时,我如何关闭应用程序呢?
对于那些想知道我想这样做的原因是应用程序包含一些关于用户的敏感数据,所以我想确保当他们不使用它时,它都被清除。
可以这样做:
活动类中的字段:
private Thread t = null;
Inside onResume()
:
if(t!=null) {
if(t.isAlive()) {
t.interrupt();
t.join();
}
t=null;
}
Inside 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();
}
我建议在onPause()
或onStop()
回调中调用finish()
。TimerTask
将无法在onPause()
中存活,并且服务不会出现,从表面上看,给您提供选项。也许你可以启动一个服务,休眠该服务运行的线程,然后在休眠定时器到期后杀死你的应用程序的进程。
或者,你可以实现一些安全库来帮助保护来自其他应用的数据。
获取应用程序的进程ID,并终止该进程的onDestroy()方法
@Override
public void onDestroy()
{
super.onDestroy();
int id= android.os.Process.myPid();
android.os.Process.killProcess(id);
}
参考-如何关闭/停止运行的应用程序在后台android
编辑-与AlarmManager一起使用
您试图做的基本问题是,当您的Activity
在后台"运行"时,它可能根本不存在于内存中。Android框架可能已经破坏了activity实例,甚至它所在的进程。所有存在的可能是你保存在onSaveInstanceState(...)
中的持久状态和最近应用程序列表的截图。可能没有什么可以让您获取引用和删除。
Frank Brenyah的建议在onPause()
中调用finish()
将阻止您的活动在后台运行,但这是最接近您想要的。您可能只想在isChangingConfigurations()
为false时执行此操作。但是,即使当你的应用程序的所有活动都完成了,Android可能会保留进程和Application
实例,以避免以后重新创建它们。因此,您可能还想使用Bhush_techidiot的建议来终止该进程。在onPause()
中这样做,因为活动可能在不调用onDestroy()
的情况下被销毁。