前言

简单记录一下JobIntentService的使用,后面高版本又废弃了,推荐使用AndroidJetpack了。

虽然废弃了,但还是记录一下(之前没记录)。

水文一篇,哈哈,大佬们可以跳过。

正文

Android 8.0对系统资源的管控更加严格,添加了后台限制规则。

如果满足以下任意条件,应用将被视为处于前台:

  1. 具有可见 Activity(不管该 Activity 已启动还是已暂停)。

  2. 具有前台服务。

  3. 另一个前台应用已关联到该应用(不管是通过绑定到其中一个服务,还是通过使用其中一个内容提供程序)。 例如,如果另一个应用绑定到该应用的服务,那么该应用处于前台。

  4. IME

  5. 壁纸服务

  6. 通知侦听器

  7. 语音或文本服务

如果以上条件均不满足,应用将被视为处于后台。

系统不允许后台应用创建后台服务。 因此,Android 8.0 引入了一种全新的方法,即 Context.startForegroundService(),以在前台启动新服务。

在系统创建服务后应用有五秒的时间来调用该服务的 startForeground() 方法以显示新服务的用户可见通知。

如果应用在此时间限制内未调用 startForeground(),则系统将停止服务并声明此应用为 ANR。

XJobService.java

public class XJobService extends JobIntentService {

    private static final String TAG = "XJobService_";
    private static final int JOB_ID = -300;


    @Override
    protected void onHandleWork(@NonNull Intent intent) {
          //这里处理intent
    }

    public static void enqueueWork(Context context, Intent intent) {
        enqueueWork(context, XJobService.class, JOB_ID, intent);
    }
}

AndroidManifest.xml

<service
     android:name=".XJobService"
     android:exported="true"
     android:permission="android.permission.BIND_JOB_SERVICE" />

调用方式

XJobService.enqueueWork(this,  new Intent(new ComponentName(this, XJobService.class)));

参考文章

  1. JobIntentService详解及使用

相关文章

暂无评论

none
暂无评论...