服务到活动通信



在服务中执行某些操作后,我正在尝试更新UI(活动)。这是一个非常简单的例子,但它似乎对我不起作用。我在这里错过了什么?

示例服务:

  public class ExampleService extends IntentService{
    @Override
    protected void onHandleIntent(Intent intent) {
        notifyActivity();
    }
    private void notifyActivity() {
        Intent broadcast = new Intent(this, ExampleActivity.class);
        sendBroadcast(broadcast);
    }
  }

示例活动:

public class ExampleActivity extends ListActivity {
         private BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
         Toast.makeText(getApplicationContext(), "received", Toast.LENGTH_SHORT).show();
        }
    };
    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(receiver);
    }
    @Override
    public void onResume() {
        super.onResume();
        IntentFilter filter = new IntentFilter();
        registerReceiver(receiver, filter);
    }
}

您不能以这种方式向匿名动态接收器发送广播。您需要在Intent中定义一个操作字符串,并在IntentFilter中使用该操作字符串。

可以考虑将LocalBroadcastManager用于此方案,以获得更好的性能。下面是一个演示这一点的示例项目。

最新更新