Anroid5.0 이상 프로세스 활성화 방안(피살된 앱을 직접 조정할 수 있음)

4222 단어 Android
몇 가지를 실험한 끝에 2중 조합을 선택했다
제1종
픽셀 액티브 활성화를 엽니다. 액티브 2개가 동시에 죽으면 이 방안은 선택할 수 없습니다.
두 번째
null의 notification을 보내서 프로세스 우선순위를 높인다. 쿠거우 음악 알림판처럼 강제로 내놓을지 죽일지
제3종
jobs 서비스 jobsheduler의 사용native는 이 방안이 app 프로세스를 강제로 죽인 후에 새로운 app 프로세스를 끌어올리는 것을 깨우는 데 사용됩니다
마지막으로 2, 3을 선택해 보직을 진행한다.
간단히 소개jobs 서비스
jobs 서비스 종류는 두 가지 추상적인 방법이 있습니다. onstartjob (), onstopjob () 는 이 서비스를 호출할 때 권한이 필요합니다.
android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
android:name=".MyJobService"
         android:enabled="true"
         android:exported="true"
         android:permission="android.permission.BIND_JOB_SERVICE"
    />

onstopjob () 는 jobfinish () 를 호출한 후에 호출합니다.프로세스를 죽일 때 온startjob () 방법을 사용합니다. 로그캣에서 로그를 볼 수 있습니다.또는 onstartjob () 에서 토스트의 일부 문자를 사용합니다.하지만 시간이 많이 걸리는 조작은 할 수 없다.전기 소모가 부족하다.
내 서비스(직접 죽은 앱을 조정할 수 있음)
/** * Created by sunxx on 2018/3/13. */@TargetApi(Build.VERSION_CODES.LOLLIPOP)public class MyJobService extends JobService {    @Override    public void onCreate() {        super.onCreate();@Override public int on Start Command(Intent intent, int flags, int start Id) {Log.i("cvca", "onStart Command"시작), start Job Sheduler(), return START STICKY;public void start Job Sheduler () {try {Job Info. Builder builder = new Job Info. Builder (1, new ComponentName (getPackageName (), My Job Service.class.getName ())));/이 방법은 설정된 이 시간 동안builder.setPeriodice (100) 작업을 최대 한 번만 수행할 수 있습니다.;//장치가 다시 시작된 후에builder를 계속 실행해야 하는지 여부입니다.setPersisted(true);            JobScheduler jobScheduler = (JobScheduler) this.getSystemService(Context.JOB_SCHEDULER_SERVICE);            jobScheduler.schedule(builder.build());        } catch (Exception ex) {            ex.printStackTrace();        }    }    @Override    public boolean onStartJob(JobParameters params) {        boolean isLocalServiceWork = isServiceWork(this, "com.mapbar.test.savelife.TestServce");        if (isLocalServiceWork){            Log.i("cvca","on");        }else{            Log.i("cvca","off");            Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.aa.test.savelife");            startActivity(LaunchIntent);        }      Toast.makeText(this,"ok",Toast.LENGTH_SHORT).show();        if (isLocalServiceWork){            Log.i("cvca","on");        }else{            Log.i("cvca","off");        }        return true;@Override public boolean onStopJob(JobParameters params) {Log.i("cvca", "onStopJob 테스트"), return true;}//서비스가 public boolean isServiceWork(Context mContext, String ServiceName) {boolean isWork = false, Activity Manager myAM = (Activity Manager) mContext.getSystemService(Context.ACTIVITY SERVICE), List = myAM.getRunning Services(100);        if (myList.size() <= 0) {            return false;        }        for (int i = 0; i < myList.size(); i++) {            String mName = myList.get(i).service.getClassName().toString();            if (mName.equals(serviceName)) {                isWork = true;                break;            }        }        return isWork;    }}
자세한 내용은http://blog.csdn.net/u013263323/article/details/56285475
데모 필요하시면 메일로 남겨주세요.

좋은 웹페이지 즐겨찾기