按下后退按钮后,android线程仍然运行

问题描述:

我想在按下后退按钮时停止线程。
我正在使用Handler按下后退按钮后,android线程仍然运行

您需要使用HandlerremoveCallbacks()函数。

示例代码:

@Override 
public boolean onBackPress(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     handler.removeCallbacks(yourRunnable); 
     return true; 
    } 

    return super.onKeyDown(keyCode, event); 
} 
+0

@Viktor我把你的代码BT不工作,仍然线程正在运行... – Siten 2011-03-23 12:10:30

+0

@siten:你如何能够确定你的线程是否仍在运行? – Wroclai 2011-03-23 12:11:09

+0

CATlog告诉我线程的价值 – Siten 2011-03-23 12:12:09

您不能使用stopdestroy方法。 在onStop方法中,您必须使用this

+0

检查链接..在上面的语句中的'this'.. – Udaykiran 2011-03-23 11:56:57

+0

他正在使用'Handler',它与最初的'Thread'不在同一个上下文中。 – Wroclai 2011-03-23 12:08:16

+0

你的礼物。我们不能停止或销毁线程和方法..感谢给我指导母牛..一起来投票支持你..谢谢你这么多... – Siten 2011-03-24 05:09:45

在创建线索时存储对线索的参考。在您的活动的中,暂停或终止引用线程。

+0

@覆盖 \t公共无效onBackPressed(){ \t \t handler.removeCallbacks( R1); \t \t super.onBackPressed(); \t}没关系? – Siten 2011-03-23 12:04:33

+0

这是不正确的。使用'Handler'中的'removeCallback()'函数。请参阅下面的答案。 – Wroclai 2011-03-23 12:07:16

您可以通过在活动重写onBackPressed()功能分配上后退按钮按下的动作。这个动作必须有一个命令来停止线程。它会显示如下。

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
      thread.stop(); 
} 
+0

我使用处理程序...和thread.stop();或处理程序。停止();不在backpress – Siten 2011-03-23 12:47:26

+0

你是否给线程一个名字,并在onBackPressed中使用它? – 2011-03-30 05:39:28

这是一个演示,以停止线程更容易和更快的方式。

Button back = (Button)findViewById(R.id.back); 
back.setText("Back"); 
back.setOnClickListener(this); 

private Handler handler = new Handler() 
{ 
@Override 
    public void handleMessage(Message msg) 
    { 
     super.handleMessage(msg); 
     if(msg.obj.toString().contentEquals("hello")) 
     { 
      // do whatever u what to perform after thread stop.... 
     } 
     removeDialog(0); 
     } 
}; 

@Override 
public void onClick(View v) 
{ 
    if(v==back) 
    { 
     showDialog(0); 
     t=new Thread() 
     { 
      public void run() 
      { 
       Message toMain = handler.obtainMessage(); 
       toMain.obj = "hello"; 
       handler.sendMessage(toMain); 
      } 
     };   
     t.start(); 
    } 
} 

@Override 
protected Dialog onCreateDialog(int id) 
{ 
      switch (id) 
     { 
        case 0: 
      { 
          ProgressDialog dialog = new ProgressDialog(this); 
          dialog.setMessage("Connecting . . . . . ."); 
          dialog.setIndeterminate(true); 
          dialog.setCancelable(true); 
          return dialog; 
        } 
       } 
       return null; 
} 

使用此方法创建或停止线程。我希望这会花费更少的时间。

如果您使用的是处理函数,您可以通过handler.removeCallbacks(runnable)来移除回调函数。 这应该完美的工作。快乐编码:)