停止正在运行的处理程序

时间:2015-02-23 04:54:26

标签: android timer android-handler

我已经实现了一个处理程序,允许用户使用任务栏菜单启动每5秒重复一次的事件。使用它的最佳方法是什么还允许用户从任务栏菜单中停止事件?

public class MainActivity extends Activity{ 
  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
        case R.id.menuitem_tracklogOn:
            final Handler handler = new Handler();
            Timer t = new Timer();
            t.schedule(new TimerTask() {
                public void run() {
                    handler.post(new Runnable() {
                        public void run() {
                            //DO SOME ACTIONS HERE , THIS ACTIONS WILL WILL EXECUTE AFTER 5 SECONDS...
                            handler.postDelayed(this, 5000);//repeat every n-milliseconds
                        }
                    });
                }
            }, 0);//start after n-milliseconds
            return true;

       case R.id.menuitem_tracklogOff:
       //stops running event from R.id.menuitem_tracklogOn
       return true;

解决方案:

final Handler handler = new Handler();
Timer t = new Timer();
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
        case R.id.menuitem_tracklogOn:
            t.schedule(new TimerTask() {
                public void run() {
                    handler.post(new Runnable() {
                        public void run() {
                            //DO SOME ACTIONS HERE , THIS ACTIONS WILL WILL EXECUTE AFTER 5 SECONDS...
                            handler.postDelayed(this, 5000);//repeat every n-milliseconds
                        }
                    });
                }
            }, 2000);//start after n-milliseconds
            return true;
        case R.id.menuitem_tracklogOff:
            t.cancel();
            handler.removeCallbacksAndMessages(null);
            return true;

2 个答案:

答案 0 :(得分:1)

  

使用的最佳方法是什么,也允许用户停止   任务栏菜单中的事件?

Handler点击停止menuitem_tracklogOff

1。通过致电Timer

取消timer.cancel()

2. :调用removeCallbacksAndMessages删除所有回调和消息:

handler.removeCallbacksAndMessages(null);

要在Timer之外的Handlercase对象之外访问,请在onOptionsItemSelected方法之外或在switch-case阻止之前声明其他对象。

答案 1 :(得分:0)

您需要致电timer.cancel()取消您的计时器。

public void cancel() // Added in API level 1

  
    

取消计时器和所有计划任务。如果当前正在运行的任务,则不会受到影响。此计时器不再安排任何任务。后续调用什么都不做。