第一篇准备使用系统的服务保活。如果想看提高app的进程等级来实现应用保活,可以直接进行点击Android进程守护,让APP在系统内存中常驻(二)跳转。
一:系统拉活service进程
1.首先新建一个service,在服务中重写onStartCommand方法,注意要返回的值。
public class StickService extends Service { public StickService() { } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. throw new UnsupportedOperationException("Not yet implemented"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { return START_STICKY; } }
2.写完服务直接在活动中启动服务即可,这就是第一种系统拉活service进程。
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //1.系统拉活service进程 startService(new Intent(this,StickService.class)); } }
二:通过jobScheduler拉活
1.新建立一个服务,不过是继承JobSerive的。
package zj.it.bhne.androidprocess; import android.app.job.JobParameters; import android.app.job.JobService; import android.os.Build; import android.support.annotation.RequiresApi; import android.widget.Toast; @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public class JobSchedulerService extends JobService { public JobSchedulerService() { } @Override public boolean onStartJob(JobParameters params) { Toast.makeText(this, "梁锎你好帅!!!", Toast.LENGTH_SHORT).show(); return false; } @Override public boolean onStopJob(JobParameters params) { return false; } }
2.在活动中需要创建JobScheduler,这个需要构建一下,全都写在下面了。
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //1.系统拉活service进程 //startService(new Intent(this,StickService.class)); //2.通过jobScheduler拉活 startJob(); } /** * 通过jobScheduler拉活 */ private void startJob() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ JobScheduler jobScheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE); if (jobScheduler != null){ JobInfo.Builder builder = new JobInfo.Builder(1,new ComponentName(getPackageName(),JobSchedulerService.class.getName())); builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){ builder.setMinimumLatency(1000); }else { builder.setPeriodic(3000); } jobScheduler.schedule(builder.build()); } } } }
3.需要在AndroidManifest中声明下权限。
<service android:name=".JobSchedulerService" android:enabled="true" android:exported="true" android:permission="android.permission.BIND_JOB_SERVICE"/>
三:通过bindService,通过ServiceConnection来拉活
1.首先还是新建一个服务。
public class LiveService extends Service { public LiveService() { } @Override public IBinder onBind(Intent intent) { return new LocalBinder(); } public static class LocalBinder extends Binder{ } }
2.在活动中调用。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //1.系统拉活service进程 //startService(new Intent(this,StickService.class)); //2.通过jobScheduler拉活 //startJob(); //3.通过bindService,通过ServiceConnection来拉活 bindService(); } private void bindService() { bindService(new Intent(this,LiveService.class),connection, Context.BIND_AUTO_CREATE); } private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { } @Override public void onServiceDisconnected(ComponentName name) { } };
好了。今天先写这三种,这三种属于系统直接拉活的方法。明天再写一篇吧,明天的有两种,都是用来提升app的进程等级的。有很多地方写的不完善,希望各位大佬指点。