我梦night以求地在可永久运行的android上创建一个简单的后台服务。
此服务将执行一些后台任务,例如池用户社交媒体并显示通知,因此它只需要一个用户交互(登录),此后便可以永久运行直到一天结束。...
但没有发生
这是我的清单:
<service
android:name=".service.MyService"
android:description="@string/serviceDescription"
android:directBootAware="false"
android:enabled="true"
android:exported="false"
android:icon="@drawable/ic_logo"
android:label="@string/serviceLabel"/>
我从Application onCreate()
开始服务
if (MyService.getInstance() == null) {
Intent intent = new Intent(this, MyService.class);
startService(intent);
}
服务:
public void onCreate() {
super.onCreate();
this.workDone = 0;
this.workerMap = new HashMap<User.UserData, Worker>(3);
this.listeners = new HashMap<Worker, Worker.WorkerListener>(3);
this.usernames = new HashMap<APIFacade, List<String>>(3);
this.threadPool = Executors.newFixedThreadPool(3);
INSTANCE = this;
}
在我的代码中绝对没有,我叫停服务,也叫停服务
那为什么在某些随机情况下我会得到nullpointerexception?
甚至有人告诉我做下面的代码来强制android“重新启动”服务
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
有人可以帮我吗……我对这个问题感到非常压力
我的应用程序每天有1000多个用户,其中大约10%的用户在使用该服务时“找到了一种方法”来创建nullpointerexception
答案 0 :(得分:3)
奥雷奥(Oreo)改变了许多后台服务的内部(或者是牛轧糖?)。我会熟悉Android文档:
https://developer.android.com/about/versions/oreo/background
和
https://developer.android.com/training/best-background
您可能要考虑使用JobScheduler
框架。
答案 1 :(得分:0)
答案是:您不能!
当前的Android 100%禁止开发人员提供永久服务。
直到KitKat为止,这样做在某种程度上是可行的(但并不完全可靠)。
从永久性服务中获得的最接近的服务是使用前台服务,该服务是从服务内部使用startForeground() method并在启动服务时使用startServiceForeground() method(在API 26及更高版本上)。
但是即使那样,该服务仍会在某个时刻被终止。
替代方法是: