5

我开发了一个应用程序,它接收一个广播,然后启动一个Activity,在其中Activity查询一个ContentProvider 实时从 DNS 中提取信息的应用程序。

我希望能够改组这个,而不是去:

BroadcastReceiver.onReceive() {
  Intent intent = new Intent(...);
  intent.setData(...); // set a single String data
  context.startActivity(intent);
}

Activity.onCreate() {
  String value = intent.getData();  // get the String data
  Cursor = ContentProvider.query(search);
  ...
  setContentView(...);
}

它去:

BroadcastReceiver.onReceive() {
  Cursor = ContentProvider.query(...);
  if (cursor != null) {
     Intent intent = new Intent(...);
     // how do I pass the cursor?
     getContext().startActivity(intent);
  }
}

Activity.onCreate() {
  // how do I retrieve the cursor?
  setContentView(...);
}

即,如果query()没有返回任何数据,我不想错过启动 Activity,并允许广播消息正常通过。

如果query()确实返回数据,我希望Cursor将其提供给Activity,这样我就不必再去查询数据了。

反过来,它Activity有自己的用户界面,用户需要对其做出响应。

这可能吗?

4

2 回答 2

6

你想要的有点困难,对我来说,效率很低。我建议您使用第一种替代方法,但是当您在活动中加载光标时,请检查是否没有数据,然后退出活动。

BroadcastReceiver.onReceive() {
  Intent intent = new Intent(...);
  intent.setData(...); // set a single String data
  context.startActivity(intent);
}

Activity.onCreate() {
  String value = intent.getData();  // get the String data
  Cursor = ContentProvider.query(search);

  if(cursor.isEmpty() ...){
    finish();
    return;
  }
  ...
  setContentView(...);
}

这将具有完全相同的效果,光标只会加载一次,并且只有在光标中存在某些内容时才会显示活动。唯一的额外开销是无论如何都会触发意图,但这并不完全是征税:)

请注意,不会有任何闪烁或任何东西,Android 会处理在 onCreate() 中调用完成的情况(我相信 onStart 和 onResume 也是如此),因此用户永远不会知道它发生了。

于 2009-03-19T18:14:49.167 回答
0

您需要找到或制作一个可序列化或可打包的游标(然后使用 intent.setExtra())。或者也许可以改为将所有数据作为一个包裹读取并将其传递给活动?

于 2009-03-19T15:13:29.457 回答