Android:如何阻止其他活动的处理程序?

时间:2015-05-10 20:45:59

标签: android handler runnable

在我的应用程序中,我在活动A中创建一个处理程序,而不是我试图从活动B中关闭它。但是处理程序不会停止。 这是用户senario和我使用的代码;

  1. 用户设置通知
  2. 显示通知并创建处理程序
  3. 用户点按通知
  4. 另一项活动开启
  5. 用户点按按钮,处理程序停止
  6. 这就是我尝试这样做的方式(只有处理程序创建和停止部件,因为其余部分是无效的)。

    public class MyAlarmService extends Service {
        public static Handler handler = new Handler();
    
        public MyAlarmService() {
        }
        @Override
        public IBinder onBind(Intent arg0)
        {
            // TODO Auto-generated method stub
            return null;
        }
    
        @SuppressWarnings("static-access")
        @Override
        public void onStart(Intent intent, int startId)
        {
            super.onStart(intent, startId);
        handler.postDelayed(runnable, 10000);
        }
       static Runnable runnable = new Runnable() {
            @Override
            public void run() {
                sendmessage();
                handler.postDelayed(this, 10000);
            }
        };
        static public void stopRunnable (){
            handler.removeCallbacks(runnable);
        }
    }
    

    这就是我试图阻止处理程序的方式;

    buttonStopCountDownTimer.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    MyAlarmService.stopRunnable();
                }
            });
        }
    });
    

    无论如何还有这个吗?

1 个答案:

答案 0 :(得分:0)

你可以通过各种方式实现这一目标。我最喜欢的是:

  1. 扩展了Application类。 (别忘了在清单上注册)。

  2. 在其中创建您的MyAlarmService字段。

  3. 在Application类中为这些字段创建setter和getter。

  4. 在MyAlarmService内的onCreate()中调用setter。

  5. 从您的stopRunnable()中移除静态偏差并将其公开。

  6. 停止runnable只需从应用程序的任何位置调用getApplication,将其强制转换为自定义Application类。检查getMyAlarmService()getter是否为null,如果是,则可以调用stopRunnable()。

  7. 不要忘记在MyAlarmService的onDestroy()中调用setter并在其上放置null。