在我的应用程序中我的处理程序不会停止 我怎么能停止处理程序?
它在关闭活动后继续开始.我能做什么?
代码是:
handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
// TODO Auto-generated method stub
super.handleMessage(msg);
if(i<max)
{
evnetChangedisplay(i);
i++;
handler.sendEmptyMessageDelayed(0, 5000);
}
else
{
i = 0;
handler.sendEmptyMessageDelayed(0,0000);
}
}
};
handler.sendEmptyMessageDelayed(0,000);
Run Code Online (Sandbox Code Playgroud)
Ric*_*mer 63
听起来这个活动在Handler执行代码之前完成了它的生命周期.您可以通过为处理程序和runnable创建实例成员来管理handler.post(runnable),然后在Activity Lifecycle方法中管理处理程序.
private Handler myHandler;
private Runnable myRunnable = new Runnable() {
@Override
public void run() {
//Do Something
}
};
Run Code Online (Sandbox Code Playgroud)
使用handler.post启动runnable.
protected void onStart() {
super.onStart();
myHandler = new Handler();
myHandler.post(myRunnable);
}
Run Code Online (Sandbox Code Playgroud)
如果在调用onStop时没有执行runnable,我们不想运行它.删除onStop方法中的回调:
protected void onStop() {
super.onStop();
mHandler.removeCallbacks(myRunnable);
}
Run Code Online (Sandbox Code Playgroud)
JAL*_*JAL 10
考虑:
private Handler myHandler= new Handler(){
@Override
public void handleMessage(Message msg){
switch(msg.what){
case 0:
this.removeMessages(0);
messageSendingCodeWhat0();
break;
default:
super.handleMessage(msg);
break;
}
}
};
Run Code Online (Sandbox Code Playgroud)
Handler只是一个线程事件循环的接口.因此,如果你停止线程,那么你"停止"处理程序.
假设您的处理程序是用于后台线程.
这是一个示例,其中quit()旨在将looper.quit()方法发送到事件循环,该循环将停止线程和处理程序.
public class MyThread extends Thread
{
private Handler m_handler;
@Override
public void run()
{
Looper.prepare();
m_handler = new Handler();
Looper.loop();
}
// Simply post the quit runnable to the thread's event loop
public void quit()
{
m_handler.post(new QuitLooper());
}
// Inner Runnable which can be posted to the handler
class QuitLooper implements Runnable
{
@Override
public void run()
{
Looper.myLooper().quit();
}
}
}
Run Code Online (Sandbox Code Playgroud)
因此,在Activity的onPause()或onStop()方法中,只需调用myThread.quit()即可.
| 归档时间: |
|
| 查看次数: |
57737 次 |
| 最近记录: |