按下后退按钮后,android线程仍然运行
答
您需要使用Handler
的removeCallbacks()
函数。
示例代码:
@Override
public boolean onBackPress(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
handler.removeCallbacks(yourRunnable);
return true;
}
return super.onKeyDown(keyCode, event);
}
答
您可以通过在活动重写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)来移除回调函数。 这应该完美的工作。快乐编码:)
@Viktor我把你的代码BT不工作,仍然线程正在运行... – Siten 2011-03-23 12:10:30
@siten:你如何能够确定你的线程是否仍在运行? – Wroclai 2011-03-23 12:11:09
CATlog告诉我线程的价值 – Siten 2011-03-23 12:12:09