1. 程式人生 > >Android程序守護,讓APP在系統記憶體中常駐(一)

Android程序守護,讓APP在系統記憶體中常駐(一)

       其實我們開發者並不想讓自己做的應用變成流氓軟體,但是沒辦法, 你的老闆需要,你要不想讓你的應用常駐,那咱就常駐不了了。。。所以說,言歸正傳。。。

      第一篇準備使用系統的服務保活。如果想看提高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的程序等級的。有很多地方寫的不完善,希望各位大佬指點。