#java #android
#ява #Android #java
Вопрос:
Я получаю намерения в BroadcastReceiver
и пытаюсь запустить службу.
Поскольку я не могу запустить службу, когда приложение работает в фоновом режиме, я пытаюсь использовать JobIntentService
, которое перенесло бы мое намерение в обычный сервис:
public class JsInvokerJobService extends JobIntentService {
...
@Override
protected void onHandleWork(Intent intent) {
// We have received work to do. The system or framework is already
// holding a wake lock for us at this point, so we can just go.
Log.i(TAG, "Executing work: " intent);
this.startService(intent);
Log.i(TAG, "Finished work: " intent);
}
тем не менее, это по-прежнему приводит к сбою моего приложения в фоновом режиме с ошибкой:
Not allowed to start service Intent app is in background
Я читал об использовании Runnable
для этих случаев, но я не могу понять, как передать мой контекст в Runnable:
final Handler mHandler = new Handler();
@Override
protected void onHandleWork(Intent intent) {
// We have received work to do. The system or framework is already
// holding a wake lock for us at this point, so we can just go.
Log.i(TAG, "Executing work: " intent);
mHandler.post(new Runnable() {
@Override public void run() {
this.startService(intent);
}
});
Log.i(TAG, "Finished work: " intent);
}
как мне получить доступ к контексту (очевидно, this
больше не будет работать)? и как мне передать намерение?
И сработает ли это в любом случае? Или для этого есть другой метод?
Комментарии:
1. Почему вы хотите запустить службу из onHandleWork() ? Выполняйте свою работу в onHandlework() самостоятельно.
2. Я работаю с React Native, и мне нужно запустить безголовую задачу JS, которая выполняла бы много логики (доступ к локальному хранилищу, выполнение некоторых сетевых вызовов и т.д.). Насколько я понимаю, это можно было сделать только с помощью обычного сервиса. смотрите reactnative.dev/docs/headless-js-android