新しいWorkManager API、1.0.0-alpha06を使用して、15分ごとにワーカーを実行しようとしています。私が間違っていない場合、PeriodicWorkRequest
でワークマネージャーを使用すると、ワーカー存続タスクが強制終了され、電話が再起動しますが、最近のアプリからタスクをスワイプすると、スケジュールされたワーカーが失われます(私は周りを待っていました) 15分間隔でスケジュールされたワーカーのログを表示するには45分)。
これらは私のファイルです:
MyExampleWorker.Java:
public class MyExampleWorker extends Worker{
public static final String TAG = "MY_EXAMPLE_WORKER";
@NonNull
@Override
public Result doWork() {
Log.i(TAG, "Starting background worker");
// Getting configuration data
long param1 = getInputData().getLong("param1", 60000);
String param2 = getInputData().getString("param2");
String param3 = getInputData().getString("param3");
PackageManager pckMgr = mContext.getPackageManager();
...
..
.
return Result.SUCCESS;
}
}
Main.Java:このメソッドは、アプリが起動するとすぐに起動します
@ReactMethod
public void execute() {
Log.i(TAG, "inside execute, setting up periodic worker in workManager");
Data inputData = new Data.Builder()
.putLong("param1", 60000)
.putString("param2", "something")
.putString("param3", "something else")
.build();
PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest
.Builder(MyExampleWorker.class, PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS, TimeUnit.MILLISECONDS)
.setInputData(inputData)
.addTag(MyExampleWorker.TAG)
.build();
WorkManager.getInstance().enqueueUniquePeriodicWork(MyExampleWorker.TAG, ExistingPeriodicWorkPolicy.KEEP, periodicWorkRequest);
}
[〜#〜] update [〜#〜]:それだけでなく、もう一度アプリを開くと、のログが表示されます "実行中、設定workManagerで定期的なワーカーを起動します "が、ワーカーがスケジュールされていないようです。1時間以上経過しており、logcatにワーカーのログがありません。
ここで何か不足していますか?
どんな助けでも大歓迎です!!
ディエゴ
これは、バッテリーの最適化やDozeモードによって引き起こされる問題です。特に、Oxygen OSやMIUIなどのChinese Romを使用している場合に発生します。
Stock Romでアプリをテストします。これで問題なく動作します。全く問題はありません。これは、これらの中国語ROMがバックグラウンドサービスの実行を妨げるカスタムの省電力技術を有効にするためです。
あなたができる2つのこと:
プログラムで質問できます
_ Intent intent = new Intent();
String packageName = context.getPackageName();
PowerManager pm = (PowerManager)
context.getSystemService(Context.POWER_SERVICE);
if (pm.isIgnoringBatteryOptimizations(packageName))
intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
else {
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + packageName));
}
context.startActivity(intent);
_
そしてあなたのマニフェストで
_<uses-permission
Android:name="Android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
_
このようにアプリをホワイトリストに登録すると、ワークマネージャーが機能します。ただし、上記の許可をリクエストすると、残念ながらGoogleはアプリをPlayストアから削除します。理由は誰にもわかりません!!!
Googleの反トラスト問題に関するこの記事を読んでください
startActivityForResult(new Intent(Android.provider.Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS), 0);