这是我的第一个活动,当我按下手机中的后退按钮时,应用程序关闭,但第二个活动即使在关闭后也会弹出!可能是因为线程仍在运行?但我试图摧毁它但无济于事!任何建议
protected void onCreate(Bundle myclass) {
super.onCreate(myclass);
setContentView(R.layout.splash);
timer = new Thread() {
public void run() {
try {
sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
finally {
Intent openStarting = new Intent("nik.tri.MENU");
startActivity(openStarting);
}
}
};
timer.start();
}
@Override
protected void onPause() {
super.onPause();
timer.destroy(); // tried timer.stop() as well
finish();
}
}
答案 0 :(得分:3)
是的,Thread
参与了该过程:
当您按下后退按钮时,您不会销毁或停止您的应用程序,只是让它不可见。当时调用onPause()
,但finish()
只会终止Activity
的工作流程:Activity
它仍在内存中,将成为后来在某些时候被摧毁了。所以Thread
一直在运行。并且调用Thread.stop()
效率不高as explained in the doc:
不推荐使用此方法。因为以这种方式停止线程是不安全的,并且可能使您的应用程序和VM处于不可预测的状态。
所以Thread
仍然在运行,这就是应用程序在3秒后重新启动的原因。或者我应该说,开始一个新的Activity
。
我不明白为什么你使用这个Thread
在3秒后开始一个新的Activity
,但是认为这是理所当然的,你应该:
使用boolean
中的Thread
来确定您是否可以开始:
timer = new Thread() {
public void run() {
try {
sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
finally {
if (!paused) {
Intent openStarting = new Intent("nik.tri.MENU");
startActivity(openStarting);
}
}
}
};
并在onPause()
/ onResume()
中处理该标记:
@Override
protected void onPause() {
paused = true;
super.onPause();
finish(); // well, I don't get that either, but I take it for granted as well.
}
@Override
protected void onResume() {
super.onResume();
paused = false;
}
答案 1 :(得分:0)
尝试在OnDestroy方法中终止应用程序。
int pid=android.os.Process.myPid();
android.os.Process.killProcess(pid);
试试这个,可能会对你有所帮助