2017-09-22 88 views
0

我的應用程序只包含一個activity(launchMode = singleTask),其中包含viewpager。在應用程序中,用戶通過AlarmManager安排警報。當這些警報被觸發時,廣播接收器會在狀態欄中創建通知(應用程序是否打開)。我的活動「活躍」嗎?

我希望在活動發佈時更新活動中的RecyclerView,並且活動處於前臺。如果活動處於後臺或根本不活動(不存在),則不需要將其調用到前臺或打開它以更新RecyclerView。

如何在調用之前檢查我的活動是否存在,比如說「MyActivity.updateMyRecyclerView()」? (我有一個關於如何檢查它是否在前景的想法,我認爲這不會是一個問題。)

+0

你能只登記你的活動作爲廣播接收器本身併發送自己的廣播(自定義類型)時被觸發的警報?然後該活動可以更新自己的回收商視圖。 –

+0

你想要哪一個?檢查活動的具體前景或檢查應用程序的前景? 如果您只是想調用MyActivity.updateMyRecyclerView(),您可以創建廣播接收器並將您的「updateMyRecyclerView」代碼添加到該廣播中,然後將廣播接收器註冊到LocalBroadcastReceiver。我使用這種方式來更新來自Firebase.onMessageReceived服務的回收站視圖 – zihadrizkyef

回答

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

只需注意,對於這樣的事情,最好使用LocalBroadcastManager:https://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager。 HTML –