在android中的先前活动中杀死一个帖子

时间:2014-03-10 04:05:40

标签: android multithreading

我在活动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();

2 个答案:

答案 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);
            }
    }

点击按钮,点击设置isStartedtrue

答案 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>