Java androidp:服务行为改变
我最近在摆弄最新的安卓p版本,试图用Java androidp:服务行为改变,java,android,service,background-service,Java,Android,Service,Background Service,我最近在摆弄最新的安卓p版本,试图用START\u STICKY标志运行一个简单的服务。 基本上,这是我的设置: MainActivity.java public class MainActivity extends AppCompatActivity { @Override public void onCreate(Bundle savedInstance) { Intent intent = new Intent(this, MyService.class);
START\u STICKY
标志运行一个简单的服务。
基本上,这是我的设置:
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstance) {
Intent intent = new Intent(this, MyService.class);
startService(intent);
}
}
public class MyService extends Service {
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate()");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy()");
}
@Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
Log.d(TAG, "onTaskRemoved()");
}
@Override
public void onLowMemory() {
super.onLowMemory();
Log.d(TAG, "onLowMemory()");
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand()");
return START_STICKY;
}
}
MyService.java
public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstance) {
Intent intent = new Intent(this, MyService.class);
startService(intent);
}
}
public class MyService extends Service {
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate()");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy()");
}
@Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
Log.d(TAG, "onTaskRemoved()");
}
@Override
public void onLowMemory() {
super.onLowMemory();
Log.d(TAG, "onLowMemory()");
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand()");
return START_STICKY;
}
}
当然,我已经在应用程序的AndroidManifest文件中添加了一个服务条目。
在我运行Android Nougat的旧手机上测试该应用程序,一切正常。
这是启动应用程序后生命周期的样子:
安卓N上的
START\u STICKY
标志,服务会重新启动,但会立即被破坏,甚至在有机会运行onStartCommand
方法之前
有什么我不知道的变化吗?我能找到的唯一与服务相关的更改都有文档记录。它只描述了前台服务现在需要特定的权限才能工作。但是,我正在运行后台服务,因此这些信息似乎与我无关
有没有人经历过类似的问题
提前谢谢 您看到的是错误Android版本的行为变化。Android Oreo引入了限制后台服务的功能。TL;DR:在后台启动服务将抛出一个
非法状态异常
,请改用作业
。尝试在onCreate()
中将该服务设为前台服务,看看是否有帮助。我的猜测是,您正在看到Android 8.0中引入的有关后台服务的更改。