Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java androidp:服务行为改变_Java_Android_Service_Background Service - Fatal编程技术网

Java androidp:服务行为改变

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);

我最近在摆弄最新的安卓p版本,试图用
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上的

  • onCreate()
  • onStartCommand()
  • 现在,在从“最近”菜单中注销应用程序后:

  • onTaskRemoved()
  • onCreate()
  • onStartCommand()
  • 这是我所期望的行为。但当我在运行Android P DP4的较新手机上启动应用程序时,启动应用程序的生命周期如下所示:

    安卓p上的

  • onCreate()
  • onStartCommand()
  • 到目前为止,没有什么不同。但当我从“最近”菜单中清除应用程序时:

  • onTaskRemoved()
  • onCreate()
  • onDestroy()
  • 由于有了
    START\u STICKY
    标志,服务会重新启动,但会立即被破坏,甚至在有机会运行
    onStartCommand
    方法之前

    有什么我不知道的变化吗?我能找到的唯一与服务相关的更改都有文档记录。它只描述了前台服务现在需要特定的权限才能工作。但是,我正在运行后台服务,因此这些信息似乎与我无关

    有没有人经历过类似的问题


    提前谢谢

    您看到的是错误Android版本的行为变化。Android Oreo引入了限制后台服务的功能。TL;DR:在后台启动服务将抛出一个
    非法状态异常
    ,请改用
    作业

    尝试在
    onCreate()
    中将该服务设为前台服务,看看是否有帮助。我的猜测是,您正在看到Android 8.0中引入的有关后台服务的更改。