Android程序守護,讓APP在系統記憶體中常駐(一)
阿新 • • 發佈:2018-12-23
其實我們開發者並不想讓自己做的應用變成流氓軟體,但是沒辦法, 你的老闆需要,你要不想讓你的應用常駐,那咱就常駐不了了。。。所以說,言歸正傳。。。
第一篇準備使用系統的服務保活。如果想看提高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的程序等級的。有很多地方寫的不完善,希望各位大佬指點。