【问题标题】:Android: How to stop a handler from a different activity ?Android:如何从不同的活动中停止处理程序?
【发布时间】:2015-05-10 20:45:58
【问题描述】:

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

  1. 用户设置通知
  2. 显示通知并创建处理程序
  3. 用户点击通知
  4. 另一个活动打开
  5. 用户点击按钮,处理程序停止

这就是我尝试这样做的方式(只有处理程序创建和停止部分,因为其余部分无关紧要)。

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();
            }
        });
    }
});

有没有办法做到这一点?

【问题讨论】:

  • 是的,使用startService(new Intent(...).setAction(YOUR_ACTION_INT)) 之类的东西,然后在您的服务中,您将能够在方法onStartCommand() 中获取命令
  • 当我尝试用 stopRunnable 代替 YOUR_ACTION_INT 时,它没有显示在选项中

标签: android handler runnable


【解决方案1】:

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

  1. 扩展应用程序类。 (不要忘记在清单上注册)。

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

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

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

  5. 从您的 stopRunnable() 中删除静态声明并将其公开。

  6. 要停止可运行,只需从应用程序中的任何位置调用 getApplication,将其转换为您的自定义应用程序类。检查 getMyAlarmService() getter 是否不为空,如果是,您可以调用 stopRunnable()。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-11
    • 2013-04-03
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多