У меня есть простой виджет, который выполняет некоторые вычисления после включения экрана, отображает их и очищает все поля после выключения экрана... У меня есть настройка приемника широковещательной передачи в моей службе, которая прослушивает ACTION_SCREEN_ON и ACTION_SCREEN_OFF.
Это работает отлично, пока телефон не переходит в спящий режим в течение длительного периода времени или если телефон интенсивно используется - как только это происходит, мой процесс виджета уничтожается (служба все еще работает, но процесс убивается) после это, когда экран гаснет и возвращается в мой виджет, не обновляется, поскольку намерение ACTION_SCREEN_ON не перехватывается моей службой :(
public class CDTservice extends Service {
@Override
public void onCreate() {
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
m_receiver = new ScreenBroadcastReceiver();
registerReceiver(m_receiver, filter);
Log.d("Widgettool", "works");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
start();
Toast.makeText(getBaseContext(), "SERVICE ON", Toast.LENGTH_SHORT).show();
return START_REDELIVER_INTENT;
}
@Override
public void onDestroy() {
stop();
unregisterReceiver(m_receiver);
}
public void start()
{
RemoteViews View = new RemoteViews(this.getPackageName(), R.layout.main);
updatewidgetclass x= new updatewidgetclass(this, View, widgetId);
x.start(); // does calculations and displays on widget
}
public void stop()
{
RemoteViews Viewclear = new RemoteViews(this.getPackageName(), R.layout.main);
updatewidgetclass y = new updatewidgetclass(this, Viewclear, widgetId);
y.stop(); // clears resources and stops
}
private class ScreenBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
Log.d("ON SCREEN ON", "might hang here");
start();
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
stop();
}
}
}
иногда когда процесс виджета не востребован системой андроид виджет отлично работает сутками и отлично отображает значения ACTION_SCREEN_ON
проблема возникает, когда - я проверяю в настройках> приложения> работает - я вижу имя своего виджета, и он говорит, что 0 процессов и 1 служба
я предполагаю, что широковещательный прием происходит в основном процессе и, следовательно, он не получает его, когда процесс уничтожается.
У меня есть обходной путь для этого, но я действительно хотел бы решить эту проблему. Любая помощь приветствуется