其实我们开发者并不想让自己做的应用变成流氓软件,但是没办法, 你的老板需要,你要不想让你的应用常驻,那咱就常驻不了了。。。所以说,言归正传。。。
第一篇准备使用系统的服务保活。如果想看提高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中声明下权限。
三:通过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的进程等级的。有很多地方写的不完善,希望各位大佬指点。