Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
GukZiLLA
35 / 35 / 2
Регистрация: 30.11.2013
Сообщений: 102
#1

Приложение зависает, если свернуть и развернуть Activity или перейти на другую Activity - Программирование Android

20.03.2015, 13:12. Просмотров 628. Ответов 4
Метки нет (Все метки)

У меня в параллельном потоке происходит куча apply()
Решение использовать apply вместо commit было принято из-за скорости.

Но возникает другая проблема - приложение зависает, если свернуть и развернуть Activity или перейти на другую Activity
http://www.cyberforum.ru/android-dev/thread1428446.html

commit работает хорошо, но очень медленно. Я понимаю, что можно группировать put'ы и выполнять один commit после, в принципе так и разумно делать. Но от такой политики возникают другие риски: если операция слишком затянется в бекграунде, а в этот момент andorid выгрузит приложение из памяти, то все put потеряются

Из-за чего может быть ANR?

Добавлено через 15 минут
Вот накатал по-быстрому пример зависания. Надо свернуть и развернуть приложение.

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
public class Main extends Activity {
 
    boolean start = true;
 
    @Override
    public void onCreate(Bundle b) {
        super.onCreate(b);
 
        setContentView(R.layout.main);
 
        final TextView tv = (TextView) findViewById(R.id.tv);
 
        new Thread(new Runnable() {
            @Override
            public void run() {
 
                while(start) {
                    SharedPreferences.Editor ed = getEditor();
                    ed.putString(getUUID(), getUUID());
                    ed.apply();
 
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            tv.setText(getSharedPreferences().getAll().size() + "");
                        }
                    });
 
                    try {
                        Thread.sleep(20);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
 
                Thread.interrupted();
            }
        }).start();
    }
 
    public static String getUUID() {
        return UUID.randomUUID().toString();
    }
 
 
    final private String BASE = "BASE";
    private SharedPreferences shadPrefBase = null;
    SharedPreferences getSharedPreferences() {
        if(shadPrefBase == null) {
            shadPrefBase = getSharedPreferences(BASE, Context.MODE_MULTI_PROCESS);
        }
        return shadPrefBase;
    }
 
 
    private SharedPreferences.Editor editorShared = null;
    private SharedPreferences.Editor getEditor() {
        if(editorShared == null) {
            editorShared = getSharedPreferences().edit();
        }
        return editorShared;
    }
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2015, 13:12
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Приложение зависает, если свернуть и развернуть Activity или перейти на другую Activity (Программирование Android):

Как из одного Activity перенести фотку в другое Activity?
Собственно необходимо отобразить фотографию в activity2, которую загрузили в...

Изменение layout-элементов одного activity из другого activity
Здравствуйте! Я хочу изменить размер или цвет текста TextView в одном...

Как перейти на главную activity
как перейти на главную страницу приложения обратно? (с другого активити)...

Из одной Activity запустить функцию другой Activity
например есть Activity2 которое я показываю в Dialog окошке, там у меня...

Как добавить cardview в activity с другой activity?
У меня есть активность(1), куда нужно добавить cardview. в этой же активности...

4
Ismoil
-8 / 10 / 5
Регистрация: 18.12.2012
Сообщений: 81
20.03.2015, 13:19 #2
Привет вот этот пример я исползовал мне помогло надеюсь тебе тоже поможет))если возникнут вопросы задавай помогу чем могу
http://www.tutorialspoint.com/android/android_shared_preferences.htm
0
GukZiLLA
35 / 35 / 2
Регистрация: 30.11.2013
Сообщений: 102
20.03.2015, 13:45  [ТС] #3
Для пущего эффекта можно уменьшить паузу.

Добавлено через 8 минут
Цитата Сообщение от Ismoil Посмотреть сообщение
если возникнут вопросы задавай помогу чем могу
Чем помог тебе этот пример в решении моей проблемы?

Добавлено через 12 минут
Хм, заметил одну особенность.

Если мы придумаем счетчик и каждый 30-ый запрос будем делать не apply, а commit, то зависаний не происходит))

Странно)
0
androbro
340 / 301 / 67
Регистрация: 17.10.2014
Сообщений: 887
20.03.2015, 14:27 #4
GukZiLLA, вот мне интересно, а этот параллельный поток как то же должен реагировать на ЖЦ активити или же приложения?или так и задумывается что он будет работать бесконечно?
и вот интересно, что происходит когда мы переходим на другую активити, тут:
Цитата Сообщение от GukZiLLA Посмотреть сообщение
runOnUiThread(new Runnable() {
* * * * * * * * * * * * @Override
* * * * * * * * * * * * public void run() {
* * * * * * * * * * * * * * tv.setText(getSharedPreferences().getAll().size() + "");
* * * * * * * * * * * * }
* * * * * * * * * * });
может я чего то не понимаю
0
GukZiLLA
35 / 35 / 2
Регистрация: 30.11.2013
Сообщений: 102
20.03.2015, 14:33  [ТС] #5
Цитата Сообщение от androbro Посмотреть сообщение
вот мне интересно, а этот параллельный поток как то же должен реагировать на ЖЦ активити или же приложения?или так и задумывается что он будет работать бесконечно?
Да это просто пример, чтобы быстро вставить и убедиться.
В реалиях все работает в сервисе.

Цитата Сообщение от androbro Посмотреть сообщение
и вот интересно, что происходит когда мы переходим на другую активити, тут:
Будет работать, пока активность не убьется)

Это все фигня, понять бы пошто зависание возникает
0
20.03.2015, 14:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2015, 14:33
Привет! Вот еще темы с решениями:

Как в Navigation Drawer Activity засунуть Activity?
Здравствуйте! у меня такая проблема navigation drawer activity работает только...

Вызвать из одной activity функцию другой activity
вызвать из одного activity функцию другой activity Подскажите, можно ли такое...

Из одного Activity получить значение другого Activity
Запускаю активити: public class MainActivity extends Activity { ... ......

Как вызвать Activity не из Activity?
Приложение перехватываем входящие СМС. Есть класс унаследованный от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru