Oreo 지원 - 배경 작업 편
배경.
Android Oreo의 출시로 인해 백그라운드에서 자주 이동하던 Service는 이동할 수 없으므로 이에 대응합니다.다음은 대응하는 기록이다.
Android Oreo Background Limit
대책
서비스를 직접 사용할 수 없기 때문에, 안드로이드 문서에서 추천하는 JobScheduller를 사용해서 실현하고 싶습니다.
선택 항목에는 다음 프로그램 라이브러리가 있습니다.
그나저나 에버노트android-job가 만든 프로그램 라이브러리도 있지만 워크매니저의 설치는 같다.
이 중 가능하면 API 등급이 낮고 유연하게 대응하는 기준은 WorkManager를 선택하는 것이다.
장점
결점
이루어지다
public class MyWorker extends Worker {
public static final String TAG = MyWorker.class.getSimpleName();
@NonNull
@Override
public Result doWork() {
LogUtil.debug(TAG, "Start My Worker");
try {
MYTracking myTracking = MyTracking.getInstance(getApplicationContext());
myTracking.start();
}
catch (Exception e) {
e.printStackTrace();
// TODO: deal with exception
return Result.RETRY;
}
return Result.SUCCESS;
}
}
public class MyTracking {
private MyTracking() {
}
public static MyTracking getInstance(Context _context) {
context = _context;
return instance;
}
public void start() {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
LogUtil.e(TAG, "Need ACCESS_FINE_LOCATION permission to start MyWorker!");
return;
}
// 制約を設定する
Criteria criteria = new Criteria();
criteria.setSpeedRequired(false);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
String bestProvider = locationManager.getBestProvider(criteria, true);
LogUtil.debug(TAG, "The best provider is: " + bestProvider);
Looper looper = Looper.getMainLooper();
MyListener myListener = new MyListener(context);
locationManager.requestSingleUpdate(bestProvider, myListener, looper);
}
}
private void startTracking() {
Constraints constraints = new Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build();
PeriodicWorkRequest request = new PeriodicWorkRequest.Builder(MyWorker.class, REPEAT_INTERVAL, TimeUnit.MINUTES).setConstraints(constraints).addTag(MyWorker.TAG).build();
// すでにMyWorkerが存在している場合は、入れ替えます。
WorkManager.getInstance().enqueueUniquePeriodicWork("MyWorker", ExistingPeriodicWorkPolicy.REPLACE, request);
}
감상
WorkManager를 사용하면 백그라운드 작업이 상당히 수월해집니다.
인용하다
Reference
이 문제에 관하여(Oreo 지원 - 배경 작업 편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/arthurbryant/items/1f08de3afacf6e4896ce텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)