当前位置:  开发笔记 > Android > 正文

Android BroadcastReceiver,ContentProvider和Activity之间的数据流?

如何解决《AndroidBroadcastReceiver,ContentProvider和Activity之间的数据流?》经验,为你挑选了1个好方法。

我开发了一个接收广播然后启动的应用程序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有自己的UI,用户需要响应.

这可能吗?



1> sooniln..:

你想要什么对我来说有点困难,相当低效.我建议您使用第一个替代方案,但是当您在活动中加载Cursor时,检查是否没有数据,然后退出活动.

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),以便用户永远不会知道它发生了.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有