Форум программистов, компьютерный форум CyberForum.ru

BroadcastReceiver + static переменная - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Веб-приложение в Java http://www.cyberforum.ru/android-dev/thread1718130.html
Всем привет. Образовалась проблема. Создаю веб приложение с применением ExtJS. Пишу код, а идея подчеркивает launch. Не понимаю почему.Когда навожу на него, вылазит сообщение "Unused property launch". Помогите кто знает в чем проблема. Ext.application({ name: 'StudentsCatalog', views: , models: , controllers: , launch: function() { ...
Программирование Android Обмен данными между Activity (одна глобальная переменная) Добрый день, товарищи. Мой путь в андроиде только начинается, поэтому элементарные для Вас вещи кажутся непонятными для меня. Есть три Activity. есть переменная int x = 5; В первой Activity кнопка, по нажатию на которую снимается одна единица от переменной. x--; Во второй Activity есть кнопка с возможностью увеличить эту переменную на единицу. x++; В третьей Activity есть TextView... http://www.cyberforum.ru/android-dev/thread1718070.html
Apk tool и декомпиляция андроид приложений Программирование Android
Добрый день! Пытаюсь декомпилировать фонарик Color Flashlight.apk при помощи утилиты Apk tool, но полной декомпиляции не получаю. Появляется папка, где расположена куча файлов- только разметка (.xml), а файла с исходным кодом на java нет. В чем может быть причина?Файл зашифрован?
Программирование Android Как сделать проверку памяти перед скачиванием файла
Добрый день. Сделал AsyncTask отдельным файлом.Скачиваю фаил, появляется ProgressDialog идет процесс закачки на карту, все работает. Задумка такая: как сделать проверку перед началом скачивания на наличие свободного места в памяти телефона. Если место есть - идет скачивание файла. Если места нет - диалог : освободите столько то. <RelativeLayout...
Программирование Android Как создать подобные меню? http://www.cyberforum.ru/android-dev/thread1717864.html
Интересует создание подобных меню. Как их сделать? Особенно "выберите файл для экспорта", где можно ввести своё имя сохраняемого файла.
Программирование Android Android TextView в блоке ListView Добрый ночи. Такая проблема возникла вот код <TextView android:layout_width="match_parent" android:id="@+id/testtext" android:text="asdasdasdasd"/> подробнее

Показать сообщение отдельно
Delphian
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 117

BroadcastReceiver + static переменная - Программирование Android

22.04.2016, 14:09. Просмотров 185. Ответов 3
Метки (Все метки)

Работая с бродкаст ресивером задался вопросом, как же он всё-таки работает?) Есть следующий код, который фиксирует состояние телефонного звонка, в первую очередь, входящего:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class CallReceiver extends BroadcastReceiver {
 
    private static String mLastState="Unknown last state";
    private String phoneState="Unknown phone state";
    private static boolean incomingCall=false;
 
 
    @Override
    public void onReceive(Context context, Intent intent) {
       phoneState = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
        if(intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")){
            LOG.debug("Outgoing call");
        }else {
            LOG.debug("Incoming call"+" "+String.valueOf(incomingCall));
        if(!mLastState.equals(phoneState)){
         switch (phoneState){
            case("RINGING"):
                incomingCall=true;
                mLastState="RINGING";
                LOG.debug("RINGING");
                break;
            case("OFFHOOK"):
                if(incomingCall) {
                    mLastState = "OFFHOOK";
                    LOG.debug("OFFHOOK");
                }
                break;
            case("IDLE"):
                if(incomingCall){
                     mLastState="IDLE";                   
                     incomingCall=false;
                     LOG.debug("IDLE");
                }
                break;
          }
         }
        }
    }
}
Если абонент звонит, мы получаем следующие логи:

main: [Incoming call false]
main: [RINGING] - звонит телефон
main: [Incoming call true]
main: [OFFHOOK] - подняли трубку и разговаривают
main: [Incoming call true]
main: [IDLE] - завершили разговор
main: [Incoming call false]

И вот, что меня смутило это состояние статичной переменной incomingCall. Когда первый раз срабатывает бродкаст ([RINGING]) он все переменные инициализирует (incomingCall=false) и затем выполняется onReceive и мы получаем incomingCall=true. При втором срабатывании ([OFFHOOK]) он уже берёт из статичной переменной, а не инициализирует static поле (incomingCall=false); хотя между этими событиями может пройти время и дальше тоже самое происходит с третьим срабатыванием ([IDLE]).

Отсюда вопрос как происходит инициализация переменных при срабатывании броадкастресивера? Что будет со статичными переменными? Инициализирует ли броадкаст переменные каждый раз или срабатывает только метод onReceive?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru