我在活动A中有一个线程,它在30秒后启动活动B.但是用户也可以在按钮点击之前转到活动B.如果用户点击该按钮,我想在活动A中杀死线程以便活动B不会再次开始。如果单击按钮我试图杀死线程,但它没有用,并且导航到B后,finish()也没有杀死该线程。
Thread t=new Thread()
{
public void run()
{
try {
sleep(5000);
currentClass = Class.forName("com.crazydna.memorizethepic.Level"+levelNumber);
Intent ourIntent = new Intent(PictureDisplay.this, currentClass);
startActivity(ourIntent);
}
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
Log.e("TAG","Error: " +e.getStackTrace());
//e.printStackTrace();
AlertDialog.Builder alertDialog=new AlertDialog.Builder(PictureDisplay.this);
alertDialog.setTitle("Alert!!!");
alertDialog.setMessage(" "+e.toString());
alertDialog.setNeutralButton(android.R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
alertDialog.show();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
AlertDialog.Builder alertDialog=new AlertDialog.Builder(PictureDisplay.this);
alertDialog.setTitle("Alert!!!");
alertDialog.setMessage(" "+e.toString());
alertDialog.setNeutralButton(android.R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
alertDialog.show();
}
}
};
t.start();
答案 0 :(得分:1)
只需将布尔变量isStarted
作为实例变量,在线程
try {
sleep(5000);
if(!isStarted)
{
currentClass =
Class.forName("com.crazydna.memorizethepic.Level"+levelNumber);
Intent ourIntent = new Intent(PictureDisplay.this, currentClass);
startActivity(ourIntent);
}
}
点击按钮,点击设置isStarted
为true
答案 1 :(得分:0)
你必须选择。
第一个选项是缩短sleep()
函数的时间,并将其括在监视取消变量的while()
块中,此变量将在您的类定义中。
Boolean run_my_timer = true;
while (run_my_timer)
{
sleep(1000); // sleep 1 second only
currentClass = Class.forName("com.crazydna.memorizethepic.Level"+levelNumber);
Intent ourIntent = new Intent(PictureDisplay.this, currentClass);
startActivity(ourIntent);
}
如果用户点击按钮
,请添加一行,将此变量设置为false
run_my_timer = false;
这将使线程退出。
第二个选项,更优雅的是创建一个Timer,而不是一个线程,如果用户按下按钮打开ActivityB你取消定时器,使用Timer的cancel()
方法。 / p>