ここで説明したことと同様のことをしています: アクティビティ内の Android BroadcastReceiver
UI の有無にかかわらず実行されるアプリケーションがあります。画面がオフのときは、バックグラウンドで動作しています。UI がオンで表示されている場合 - 何かが起こったことをユーザーに知らせたいと思います。
そのため、上記のトピックのサンプルに従い、 でブロードキャスト レシーバーを登録しましたActivity
。登録onResume
および登録解除onPause
private BroadcastReceiver uiNeedToBeUpdatedReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
// TODO Auto-generated method stub
Toast.makeText(BaseActivity.this, "received", Toast.LENGTH_LONG);
}
};
@Override
protected void onPause()
{
Log.d(LOG_TAG, "onPause");
super.onPause();
// TODO: Unregister broadcast receiver
unregisterReceiver(uiNeedToBeUpdatedReceiver);
}
@Override
protected void onResume()
{
Log.d(LOG_TAG, "onResume");
super.onResume();
// TODO: Register for broadcast events
IntentFilter filter = new IntentFilter();
filter.addAction("com.my.uineedtobeupdated");
registerReceiver(uiNeedToBeUpdatedReceiver, filter);
バックグラウンドで実行される私の中で、AsyncTask
私はこれを行います:
// Send broadcast - if UI active it will see it:
Intent broadcast = new Intent();
broadcast.setAction("com.my.uineedtobeupdated");
MyApplication.Me.sendBroadcast(broadcast);
まあ、すべてがうまくいきます。ブロードキャストを受信すると、Toast が表示すべき行にヒットしていることをデバッガーで確認できます。しかし、トーストがポップアップ表示されません。
そのスレッドの問題ですか?ブロードキャストを受信した場合、UI スレッド上にある必要がありますか? なぜこの動作を観察するのですか?