Android показывает диалог из фоновой ветки в любой активности приложения - PullRequest
1 голос
/ 04 марта 2011

Я пытался найти четкий ответ, но нигде не смог его найти.Я запускаю фоновый поток в основной активности, который проверяет определенную переменную, и если это правда, он должен показать диалоговое окно предупреждения.Я также хочу, чтобы это диалоговое окно отображалось при любой сфокусированной активности приложения.Я попробовал это, добавив в поток Looper.prepare () и Looper.loop (), но он не работает должным образом и влияет на цикл while (), который я использую для проверки переменных в этом потоке.Может ли кто-нибудь помочь мне выяснить, каков наилучший способ реализовать это?

Спасибо.

Ответы [ 3 ]

1 голос
/ 04 марта 2011

Если вы создаете фоновый поток с помощью потока main / ui, вы можете создать Handler в конструкторе.Если вы хотите запустить некоторый код в потоке main / ui, вы просто Handler.post(Runnable r) можете запустить из потока ui.

Если ваш фоновый поток не создается в потоке ui / main, вы можетеиспользуйте BroadcastIntent to и шаблон BroadcastReceiver для отправки сообщений между фоновым потоком и действиями переднего плана.Это особенно полезно, если вы переключаете основные действия в течение срока полезного использования фонового потока.

0 голосов
/ 25 апреля 2014

Хорошо, я вижу два подхода.Первый - грязный, но быстрый: вы можете расширять классы TimerTask и Handler.YourTimerTask проверит переменную и отправит Message на YourHandler.YourHandler должен переопределить handleMessage и показать диалоговое окно.

Второй может быть излишним, но все же.Android основан на событиях .Это означает, что система дает вам возможность создавать свои собственные события и обрабатывать их.Таким образом, вы можете запустить Service, который проверит вашу переменную и отправит Broadcast (может быть локальным).В своей деятельности вы должны создать свой собственный BroadcastReceiver и зарегистрировать его.Этот получатель обработает сообщение.

0 голосов
/ 04 марта 2011

Вы можете попытаться создать реализацию Runnable и передать ее методу View post().

final Runnable r = new Runnable() {
    public void run() {
        //code to display dialog
    }
}

final View view = findViewById(R.id.XYZ);
view.post(r);

Это запустит Runnable в потоке пользовательского интерфейса.

...