我正在主要活动中开始并使用我的服务:
public static MyServiceConnection serviceConnection;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
serviceConnection = new MyServiceConnection();
startService(new Intent(...));
bindService(new Intent(...), serviceConnection.getServiceConnection(), 0);
}
如果我将开始另一个活动(没有完成Main),我可以像这样使用静态变量:
Main.serviceConnection.Method1()
我会得到NullReferenceException吗?例如,如果操作系统决定释放一些内存并破坏主要活动?有可能吗?
答案 0 :(得分:1)
从其他活动引用静态ServiceConnection是否正确?
没有。引用the documentation:
您应该在匹配客户生命周期的启动和拆卸时刻配对绑定和解除绑定。例如:
- 如果您只需要在活动可见时与服务进行交互,则应在onStart()期间绑定并在onStop()期间取消绑定。
- 如果您希望活动即使在后台停止时也会收到响应,那么您可以在onCreate()期间绑定并在onDestroy()期间取消绑定。请注意,这意味着您的活动需要在其运行的整个时间内使用该服务(即使在后台运行),因此如果该服务处于另一个流程中,那么您会增加流程的权重并且更有可能系统将杀死它。
请允许每个组件绑定到服务本身。
我在主要活动中开始和帮助我的服务:
请删除static
关键字。请仅在绑定到服务的组件中使用ServiceConnection
。如果您有其他组件,他们也可以自己绑定到服务。
我会得到NullReferenceException吗?
很可能。例如,当你想你将要开始另一个活动(没有完成主要)"时,并不要求" Main"活动留在身边。如果Android终止您的进程(在您移至后台后)并且用户通过recent-tasks列表返回给您,则可以在" Main"之前创建您的第二个活动。是在新的过程中。
请允许您的第二个活动绑定到服务本身。或者,不要使用绑定服务。