我的活动是否有效'?

时间:2017-09-22 23:34:49

标签: android

我的应用只包含一个活动(launchMode = singleTask),其中包含一个viewpager。在应用程序中,用户通过AlarmManager计划警报。当触发这些警报时,广播接收器会在状态栏中创建通知(应用程序是否打开)。

我希望每当发出通知并且活动在FOREGROUND时更新活动中的RecyclerView。如果活动是在后台活动,则“活跃”活动根本没有(不存在),没有必要将它调到前面或打开它只是为了更新RecyclerView。

如何在调用之前检查我的活动是否存在,比如说," MyActivity.updateMyRecyclerView()"? (我知道如何检查它是否在前台,我认为这不会成为一个问题。)

1 个答案:

答案 0 :(得分:0)

您可以将广播接收器用于您的活动。您可以发送广播,如果您的活动是“活着”的话。并且已注册接收广播,您可以从那里触发recyclerView更新。

在您创建此类通知时发送广播

Intent intent = new Intent("key_to_identify_the_broadcast");
Bundle bundle = new Bundle();
bundle.putBoolean("updateRecyclerView",true);
intent.putExtra("bundle_key_for_intent", bundle);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

并且在您想要接收此意图的活动中,您可以使用广播接收器

  private final BroadcastReceiver mHandleMessageReceiver = new 
  BroadcastReceiver() {
     @Override
     public void onReceive(Context context, Intent intent) {
    Bundle bundle = 
        intent.getExtras().getBundle("bundle_key_for_intent");
        if(bundle!=null){
            boolean shouldRefresh = bundle.getBoolean("updateRecyclerView");
            if(shouldRefresh){
               //Refresh your recyclerView
            }
        }

 }
};

您需要注册和取消注册接收器才能工作

在onResume方法中,您可以注册此接收器以接收广播

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    IntentFilter filter = new IntentFilter("key_to_identify_the_broadcast");
    LocalBroadcastManager.getInstance(this)
    .registerReceiver(mHandleMessageReceiver,filter);
}

您还需要在活动暂停之前取消注册

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    try {
     LocalBroadcastManager.getInstance(this)
         .unregisterReceiver(mHandleMessageReceiver);

  } catch (Exception e) {
    Log.e("UnRegister Error", "> " + e.getMessage());
  }
}