众所周知,Java memory model由数据(或代码)、堆栈和堆段组成。我认为Android也是如此。我有一个单一的整体应用程序(让我们考虑一下这个应用程序的代码库太大了)。当我启动应用程序时,应用程序中的活动和片段被加载到Dalvik JVM中并卸载。在这种情况下,这是如何与服务一起工作的?假设我有一个这样的STICKY_SERVICE
,
public class CountingNumberService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
for(int i=0; i<100; i++) {
//Do something
}
return Service.START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
/**
* This has to do with some inter process communication
*/
return null;
}
}
因为服务是STICKY
的,所以它使进程的行为像一个持久进程,并且它总是在运行。现在考虑我停止使用我的应用程序,作为一个用户,我认为应用程序是关闭的(我正在关闭它或从最近清除它),但由于我的服务是STICKY
,它将始终运行,我假设我会有以下影响,
我对进程上的STICKY
服务(一个巨大的整体代码)及其影响感到有点困惑。有人能在这方面给我澄清一下吗?
发布于 2019-05-10 03:36:02
,因为服务是粘性的,它使进程的行为像一个持久进程,并且它总是在运行。
不,它不是。
,但是因为我的服务是粘性的,所以它总是在运行
不,不会的。
引用the documentation for START_STICKY
如果此服务的进程在启动(从
onStartCommand(Intent, int, int)
返回后)时被终止,则将其保留在已启动状态,但不保留此提交的意图。稍后,系统将尝试重新创建服务。
Android仍然欢迎在它认为合适的时候终止你的进程。START_STICKY
所做的就是鼓励Android在条件允许的情况下重启你的服务(在此过程中创建一个新的进程)。
https://stackoverflow.com/questions/56066255
复制相似问题