0

У меня есть приложение, которое начинается, когда устройство открыто. То, что я пытаюсь сделать, - это не открытие какой-либо деятельности, а поток, который выполняет какой-то процесс.Использование контекста в приемнике Класс

Вот мой класс приемника:

public class BOOTReceiver extends BroadcastReceiver { 
    Info info = new Info(); 

    public void onReceive(Context context, Intent intent) { 
     assignUserInfo(context); 
     SomeThread u = new SomeThread(info); 
     u.run(); 
    } 

    private void assignUserInfo(Context ctx) { 
     info.setInfo(AnotherClass.getInfo(ctx)); 
    } 
} 

Если я называю «assignUserInfo», который называет еще классы с параметром «контекста», то приложение не запускается. В противном случае поток работает.

Что не так с этим кодом?

+0

читайте это: http://developer.android.com/reference/android/content/BroadcastReceiver.html#ReceiverLifecycle – pskink

+0

«Что не так с этим кодом?» : Трудно сказать, поскольку вы не сказали нам, что ваши классы Info, SomeThread или AnotherClass или что они делают. – Squonk

ответ

0

Как указано pskink, я увидел следующие указания в документации:

После возвращения из OnReceive(), то BroadcastReceiver больше не активно, и процесс его проведения только так важно, как любой другой компоненты приложения, которые работают в нем.

Таким образом, содержащий всю процессию в функции onReceive() разрешает мою проблему.

Однако, опять-таки из документации:

Это означает, что для более длительных выполняющихся операций, которые вы будете часто использовать службы в сочетании с BroadcastReceiver держать содержащий процесс активным в течение всего времени вашей работы ,

Таким образом, согласно заявлению младшего Buckeridge, использование Сервиса также является альтернативой более продолжительным операциям.

1

Я думаю, вы должны использовать IntentService для обработки потоков. Кроме того, если ваше приложение может разбудить телефон, попробуйте расширить приемник от WakefulBroadcastReceiver. В качестве дополнительной рекомендации, попробуйте использовать контекст приложения, когда возможный

context.getApplicationContext(); 

, чтобы избежать утечек памяти.

http://developer.android.com/reference/android/app/IntentService.html http://developer.android.com/reference/android/support/v4/content/WakefulBroadcastReceiver.html

Надеется, что это помогает.

Смежные вопросы