所以基本上我有一个Service
是我的应用程序的本地。它只从代码中的一个地方开始,我在起始意图中发送一个额外的地方。在onStartCommand(Intent, flags, startId)
方法中,我读了额外的通过
this.searchId = intent.getStringExtra("searchId")
现在,有时应用程序崩溃,日志显示此行是罪魁祸首,传入的意图为null,因此intent.getStringExtra抛出NPE。
问题:意图如何为空?只有我开始服务,我专门创建了意图。
答案 0 :(得分:0)
服务可以被系统杀死,无论是电源,内存还是笑声。如果是这样,系统想知道您是否希望在条件允许其再次运行时重新启动服务。如果您希望重新启动服务,以及如何通过onStartCommand返回的值,您的描述方式。有四种选择
START_STICKY
默认选项(Service
自己的onStartCommand
返回的选项)告诉系统重新启动服务,但不重新启动用于启动它的Intent。这就是导致我的服务以空意图启动的原因。START_STICKY_COMPATIBILITY
实际上并不知道这是做什么的,文档不清楚START_NON_STICKY
一旦服务因任何原因被终止,系统不应重新启动它,但应用程序本身负责在需要时重新启动。START_REDELIVER_INTENT
告诉系统重新启动服务,并向其发送与首先启动服务相同的意图。这是我最终在我的服务中返回以防止null Intents问题。现在,如果我的服务因某些原因而被杀死,它会以与最初启动相同的方式重新启动,我的onStartCommand没有看到任何区别,一切顺利。如果你没有使用开始意图来获得有用的东西,那么默认的START_STICKY
也同样好。只需返回
return super.onStartCommand(intent, flags, startId);