我在Android中有一项服务,它封装了一个具有start
方法的框架。服务归结为这样的事情,省略了许多事情:
public class MyService extends Service {
private IBinder thisBinder;
public MyService(){
thisBinder = new LocalBinder();
}
@Override
public IBinder onBind(Intent intent) {
return thisBinder;
}
public void start(Map<String, Object> options)
{
getDriverManager().start(options);
}
}
我还有一个桥接类来调用服务:
public class MyServiceBridge implements ServiceConnection {
private boolean started = false;
private boolean bound = false;
private MyService myService;
public MyServiceBridge(Context context){
this.context = context;
}
public void bindService(){
Intent intent = new Intent(getContext(), MyService.class);
getContext().bindService(intent, this, getContext().BIND_AUTO_CREATE);
getContext().startService(intent);
}
// Here's a sample call, and the one that is relevant
public void start(Map<String, Object> options){
setOptions(options);
if(bound == true){
getMyService().start(options);
}
else{
started = true;
}
}
}
我调用了网桥的start
方法来运行该服务。这种方法很好,除了在这种特殊情况下(到目前为止)。 MyApplication
类在onCreate
上调用网桥的启动方法:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
getServiceBridge().start(null);
}
}
这个,according to the docs在应用程序启动时调用,在创建任何活动,服务或接收者对象(不包括内容提供者)之前调用。&#34;。事实上它似乎是这样,因为服务没有启动,而是在我关闭应用程序时启动(奇数,至少)。如果我将呼叫转移到活动的onCreate
方法,这是有效的,但这并不理想,因为我也可以停止服务,我希望服务在应用的生命周期内运行。也就是说,服务应该在应用程序启动时启动,并在应用程序终止时停止。这有意义吗?还有另一种方法吗?
答案 0 :(得分:2)
在我看来,当你决定在Application onCreate中运行服务时,你做得很好。但是当你关闭应用程序时听到服务启动是很奇怪的。 我已经多次这样做了,服务开始于应用onCreate,必须被调用。
您是否检查过您的应用程序是否存活并在后台运行?请确保在测试前杀死了您的应用程序。使用Task Killer或类似的东西,以确保应用程序始终是新开始的。
可悲的是,Android没有适当的机制在退出应用程序时通知您,因为它在系统决定终止并释放资源之前仍然存在。