Android 服务 运行 上的单独进程未创建
Android service running on separate process is not Created
我已经按照 radiolondra57 从 Intent Service not working in doze mode 制定的步骤在单独的进程上创建服务 运行。
我遇到了一个问题,即在 startService 之后永远不会调用此服务的 onCreate。这是我的设置:
清单:
<service
android:name=".service.Smart113MainService"
android:enabled="true"
android:exported="true"
android:process=":antiDozeProcessName"
android:label="LocationService">
</service>
在第一个Activity的onCreate中调用了这个方法:(是的,测试phone的版本等于"O" :))
private void startServices() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startService(new Intent(this, Smart113MainService.class));
}
}
服务:
@Override
public void onCreate() {
super.onCreate();
doingSomeStuff();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
startForeground(Smart113NotificationFactory.locationSharingNotificationId, notification.logIntoAppNotification(this).build());
doingMoreStuff();
return START_STICKY;
}
这是我没有对正在发送的 Intent 设置操作的问题吗?这实际上是我在代码中看到的唯一区别..
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
startService(new Intent(this, Smart113MainService.class));
}
else {
startForegroundService(new Intent(this, Smart113MainService.class));
}
将 startForeground
代码移动到 onCreate()
@Override
public void onCreate() {
...
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForeground(NOTIFICATION_ID, notification);
}
...
}
删除通知onDestroy()
@Override
public void onDestroy() {
...
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
stopForeground(true); //true will remove notification
}
...
}
更新
您没有在不同的进程中获得调试点,因为您正在从附加调试器中选择主进程。 Select 正确的调试过程。
我已经按照 radiolondra57 从 Intent Service not working in doze mode 制定的步骤在单独的进程上创建服务 运行。 我遇到了一个问题,即在 startService 之后永远不会调用此服务的 onCreate。这是我的设置:
清单:
<service
android:name=".service.Smart113MainService"
android:enabled="true"
android:exported="true"
android:process=":antiDozeProcessName"
android:label="LocationService">
</service>
在第一个Activity的onCreate中调用了这个方法:(是的,测试phone的版本等于"O" :))
private void startServices() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startService(new Intent(this, Smart113MainService.class));
}
}
服务:
@Override
public void onCreate() {
super.onCreate();
doingSomeStuff();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
startForeground(Smart113NotificationFactory.locationSharingNotificationId, notification.logIntoAppNotification(this).build());
doingMoreStuff();
return START_STICKY;
}
这是我没有对正在发送的 Intent 设置操作的问题吗?这实际上是我在代码中看到的唯一区别..
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
startService(new Intent(this, Smart113MainService.class));
}
else {
startForegroundService(new Intent(this, Smart113MainService.class));
}
将 startForeground
代码移动到 onCreate()
@Override
public void onCreate() {
...
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForeground(NOTIFICATION_ID, notification);
}
...
}
删除通知onDestroy()
@Override
public void onDestroy() {
...
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
stopForeground(true); //true will remove notification
}
...
}
更新
您没有在不同的进程中获得调试点,因为您正在从附加调试器中选择主进程。 Select 正确的调试过程。