我的应用只包含一个活动(launchMode = singleTask),其中包含一个viewpager。在应用程序中,用户通过AlarmManager计划警报。当触发这些警报时,广播接收器会在状态栏中创建通知(应用程序是否打开)。
我希望每当发出通知并且活动在FOREGROUND时更新活动中的RecyclerView。如果活动是在后台活动,则“活跃”活动根本没有(不存在),没有必要将它调到前面或打开它只是为了更新RecyclerView。
如何在调用之前检查我的活动是否存在,比如说," MyActivity.updateMyRecyclerView()"? (我知道如何检查它是否在前台,我认为这不会成为一个问题。)
答案 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());
}
}