Android 절전 의 비밀의 JobScheduler
다음은 작은 예 를 보 여 드 리 겠 습 니 다.
메 인 활동
builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED); 무료 인터넷
public class MainActivity extends Activity {
JobScheduler js;
JobInfo.Builder builder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
js=(JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
builder=new Builder(1, new ComponentName(this, DemoService.class));
builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED);
js.schedule(builder.build());
}
}
스케줄 러 가 필요 한 Job와 이 파이 가 사용 가능 할 때 이 DemoService 는 onStartJob 을 실행 합 니 다.
public class DemoService extends JobService{
@Override
public boolean onStartJob(JobParameters params) {
// TODO Auto-generated method stub
final JobParameters mJobParameters=params;
AsyncTask<Void, Void, Void> mTask = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
Toast.makeText(wenfengService.this, "hello", 1000).show();
jobFinished(mJobParameters, true);
super.onPostExecute(result);
}
};
mTask.execute();
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
// TODO Auto-generated method stub
Toast.makeText(this, "bye", 1000).show();
return true;
}
}
리스트
<service
android:name=".DemoService "
android:permission="android.permission.BIND_JOB_SERVICE"
android:exported="true"/>
onStartJob.png
onStartJob 함수 에는 항상 두 가지 장면 이 있 습 니 다.
1.시간 이 걸 리 지 않 는 동작,이 때 는 false 로 돌아 가 야 합 니 다.
2.시간 이 걸 리 는 작업,예 를 들 어 데이터 다운로드 등 은 새로운 스 레 드 를 열 어야 합 니 다(JobService 는 메 인 스 레 드 에서 뛰 기 때 문 입 니 다).그리고 true 로 돌아 갑 니 다.
만약 스케줄 링 이 임무 수행 에 실패한다 면 어떻게 합 니까?
작업 이 실패 한 경우 가 많 습 니 다.예 를 들 어 다운로드 에 실 패 했 습 니 다.예 를 들 어 다운로드 과정 에서 와 이 파이 가 끊 겼 습 니 다.
문제 없습니다.구 글 은 재 조정 에 편리 한 방법 을 제공 합 니 다.
예 를 들 어 다운로드 과정 에서 와 이 파이 가 끊 기 면 JobService 는 onStopJob 함 수 를 되 돌려 줍 니 다.이것 은 함수 의 반환 값 을 true 로 설정 하면 됩 니 다.와 이 파이 가 다시 연결 되면 JobService 는 onStartJob 함 수 를 다시 바 꿉 니 다.
다운로드 에 실 패 했 습 니 다.예 를 들 어 위의 예 에서 AsyncTask 가 실 패 했 습 니 다.어떻게 해 야 합 니까?우 리 는 AsyncTask 의 onPost Execute 에서 job Finished(mJobParameters,true)를 실행 해 야 합 니 다.이곳 의 true 대표 임 무 는 와 이 파이 조건 이 다시 만족 하 는 상황 에서 재 조정 해 야 합 니 다.경전의 쓰 기 는 다음 과 같다.
스케줄 링 시작
@Override
public boolean onStartJob(final JobParameters params) {
mDownloadArtworkTask = new DownloadArtworkTask(this) {
@Override
protected void onPostExecute(Boolean success) {
jobFinished(params, !success);
}
};
mDownloadArtworkTask.execute();
return true;
}
스케줄 을 정지 하 다
@Override
public boolean onStopJob(final JobParameters params) {
if (mDownloadArtworkTask != null) {
mDownloadArtworkTask.cancel(true);
}
return true;
}
만약 스케줄 러 의 임무 가 늘 실 패 를 한다 면 어떻게 합 니까?전 기 를 절약 하기 위해 실패 한 임 무 는 집행 조건 이 만족 하 는 상황 에서 일정 시간 을 연기 해 야 집행 할 수 있다.그리고 실패 횟수 가 늘 어 나 면서 지연 시간 이 길어진다.예 를 들 어 와 이 파이 가 끊 겨 실패 한 작업 은 와 이 파이 가 연 결 된 후 바로 수행 되 지 않 고 일정 시간 지연 되 어야 수행 할 수 있 습 니 다.
지연 시간=30s*실패 횟수.
아래 그림 은 JobScheduler 가 framework 층 에 있 는 순서 그림 입 니 다.다음 장 은 adb 명령 으로 JobScheduler 의 상황 을 직관 적 으로 볼 것 입 니 다.놓 치지 마 세 요.문제 가 있 으 면 메 시 지 를 남 겨 도 됩 니 다.모두 함께 토론 합 시다!
JobScheduler 내부 순서 도
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.