2016-09-14 72 views
1

當活動位於前臺時,下面的代碼片段可以工作。但是,當MainActivity處於後臺時,MainActivity將無法接收廣播。如何將數據從IntentService發送到已暫停的活動?

如何確保MainActivity始終接收廣播?有沒有其他方式將數據從IntentService發送到暫停的活動?

在我IntentService,我將數據發送回MainActivity這樣

Intent intent = new Intent(); 
intent.setAction(MY_SERVICE_RESULT); 
intent.putExtra(MY_SERVICE_VALUE, "hello from service"); 
LocalBroadcastManager.getInstance(context).sendBroadcast(intent); 

在我的活動,我使用了BroadcastReceiver這樣

public class MainActivity extends AppCompatActivity{ 

    BroadcastReceiver receiver; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    receiver = new BroadcastReceiver(){ 
     @Override 
     public void onReceive(Context context, Intent intent) { 
     String value = intent.getStringExtra(MY_SERVICE_VALUE); 
     } 
    }; 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     IntentFilter intentFilter = new IntentFilter(); 
     intentFilter.addAction(MY_SERVICE_RESULT); 
     LocalBroadcastManager.getInstance(this).registerReceiver(receiver, intentFilter); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver); 
    } 
    } 
} 
+0

您可以使用** BroadCastReceiver **來完成此操作,也可以使用** Callback **。 –

+0

@RahulSharma,我已經在使用BroadcastReceiver了。我如何使用回撥?任何示例? –

+0

將其實施到您的活動中,並從此活動類的服務類構造函數中傳遞迴調實例。並且在服務類中使用此回調將數據發送到您已實施的此活動。 –

回答

0

如何確保MainActivity會一直收到廣播嗎?

你不行。

但是,您可以通過存儲IntentService想要臨時發送到MainActivity的數據(例如SharedPreferences)來解決此問題,並讓MainActivity檢查onResume中的存儲。

可能的情況
IntentService做它的事情。檢查MainActivity是否活動*。如果是 - >發送廣播。如果不是 - >存儲在某處,並讓MainActivity檢查onResume中的存儲。您可以使用應用程序的生命週期回收來監視活動的狀態,以查看活動是否正在運行以及是否正在運行。

相關問題