【问题标题】:Restart activity on command received from Firebase根据从 Firebase 收到的命令重新启动活动
【发布时间】:2019-07-20 21:40:37
【问题描述】:

我正在尝试根据从 Firebase 收到的命令重新启动我的主要活动。我设法让它工作,但在 MainActivity 类中有一个 TimerTask 并且为了从我的 Firebase 类调用 Stop 函数,我必须创建 MainActivity 类的一个新实例。这也将创建一个新的计时器实例。该命令将停止计时器(新启动的计时器),但旧计时器继续在后台运行。如何在 MainActivity 中调用停止函数而不创建新实例。它是一个非静态函数,所以我不能从静态上下文中调用它。

如果有帮助,这是我的代码片段。

    if (remoteMessage.getNotification() != null) {
        String msg = remoteMessage.getNotification().getBody();
        Log.v("test", "FB msg is: " + msg);
        if (msg.equals(COMMAND)) {
             Intent i = new Intent(MyFirebaseMessagingService.this, DashboardActivity.class);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
            startActivity(i);
            dashboardActivity.stopTimer();


           // SharedPrefManager.getInstance(getApplicationContext()).storeTimer("false");


        } else {
            Log.v("test", "unknown");
        }
    }

最终,我想从 Firebase 发送一个命令,强制我的 MainActivity 完全重启。

【问题讨论】:

    标签: android android-activity timertask non-static


    【解决方案1】:

    使用

    new dashboardActivity().stopTimer();
    

    如果有错误则使用

    new Handler(Looper.getMainLooper()).post(new Runnable() {
                        @Override
                        public void run() {
                            new dashboardActivity().stopTimer();
                        }
                    });
    

    【讨论】:

    • 这将创建一个新的 DashboardActivity 实例。这将创建一个新计时器,而旧计时器将继续在后台工作。
    【解决方案2】:

    如果您想重新开始活动,请使用以下代码:

    Intent intent = getIntent();
    finish();
    startActivity(intent);
    

    【讨论】:

    • 你不能使用finish();从另一个班级。我的停止功能也在服务类中。
    【解决方案3】:

    我使用了 BroadcastReceiver,它成功了。按照这个例子here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 2015-11-25
      • 2014-10-13
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      相关资源
      最近更新 更多