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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Построение UI для Android приложения на C# Mono http://www.cyberforum.ru/android-dev/thread1399616.html
Форумчане хочу написать приложение для android на c# mono, не подскажете есть какие нибудь программки для построения интерфейса?
Программирование Android Обновление данных адаптера Здравствуйте. Помогите, кто сталкивался. Есть список, где в зависимости от значения свойства отображенного объекта подставляется лейаут: LayoutInflater inflater =... http://www.cyberforum.ru/android-dev/thread1399479.html
Нужен ваш совет. Игра или программа под Андроид Программирование Android
Мне в течении двух месяцев надо писать приложения под Андроид. Это должна быть или программа-виджет, которая: 1) определяет, где сейчас находится пользователь: дома, на работе, в другом помещении,...
Нужно ли шифровать файлы данных на андроиде? Программирование Android
Программа использует массив строк, подгружаемых из файла res/values/strings.xml Сможет ли конечный пользователь получить доступ к данным из этого файла? Проще говоря, я не хочу, чтобы кто-то...
Программирование Android Как перенести из 3d max анимацию в приложении на андроиде? http://www.cyberforum.ru/android-dev/thread1399404.html
Единственное что приходит на ум сохранять в формате stl каждый кадр, но макросом это сделать не возможно. Может кто то знает как это делать?
Программирование Android Отключить блокировку экрана при бездействии Как можно отключить блокировку экрана, если приложение активно, но пользователь долгое время не совершал никаких действий? подробнее

Показать сообщение отдельно
GukZiLLA
35 / 35 / 2
Регистрация: 30.11.2013
Сообщений: 102

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

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

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

Но возникает другая проблема - приложение зависает, если свернуть и развернуть Activity или перейти на другую Activity

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru