我有以下组件:
BroadcastReceiver
Intent
的{{1}} BroadcastReceiver
绑定的Activity
(如果是某些人,则启动它)
原因不存在)这些组件在哪些情况下共享同一个Application对象?
有时,Service
可以绑定到Activity
,而其他时间Service
onBind()
未被调用,而Service
收到Activity
{1}} null
中{1}} IBinder
现在共享代码的部分太多了。根据讨论,我可以在得到具体想法时分享相关部分。
答案 0 :(得分:1)
您的问题的简短回答是是,Activity
,Service
和BroadcastReceiver
个对象确实共享相同的Application
对象
有时,运行Service
对象的进程可能会被终止并且稍后会生成一个新进程。在这种情况下,内核(而不是Dalvik VM)回收内存,因此引用的Application
对象与以前不同。
答案 1 :(得分:0)
Android应用中的许多地方总是需要一些信息。例如,它可以是会话令牌。
有时建议的模式是将数据转储到Application对象中,并认为它可以在所有活动和其他组件(如Service或BroadcastReceiver)中使用。
class MyApplication extends Application {
String name;
String getName() {
return name;
}
void setName(String name) {
this.name = name;
}
}
App组件可以像下面这样使用它:
class NameActivity extends Activity {
void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
// Just assume that in the real app we would really ask it!
MyApplication app = (MyApplication) getApplication();
app.setName("set name here");
}
}
所以,是的,活动,服务等应用程序组件共享相同的Application对象,只要它们运行的进程保持活动状态。
其次,How come sometimes the Activity can bind to the Service while at other times onBind() of the Service is not called and the Activity receives a null
可能有不同的原因可能发生以上情况:
1.执行IBinder
的服务可能已被操作系统杀死
2.服务已创建,可能需要一些时间才能完全初始化。在此初始化完成之前,如果Activity等组件尝试绑定它。