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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
dimon4
4 / 4 / 0
Регистрация: 12.04.2016
Сообщений: 39
#1

Рестарт при прерывании работы приложения сторонней службой - Android

17.06.2016, 20:05. Просмотров 317. Ответов 12
Метки нет (Все метки)

прошу провести ликбез в этом направлении.

activity1 запускает activity2, все работает. activity2 на паузе сохраняет свое состояние, на резюме восстанавливает... тут подкрался входящий вызов и при возврате в приложении снова открылось activity1... никаких ошибок при этом не было.
попробовал несколько раз звонить - ничего не прерывалось. при обычном переключении различных приложений тож все работает нормально...

как можно заставить работающее приложение "забыть" о первом окне пока не backpressed второго окна?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2016, 20:05     Рестарт при прерывании работы приложения сторонней службой
Посмотрите здесь:

Монопольный режим работы приложения Android
Завершение работы приложения Android
Рестарт активности по нажатию на кнопку "home" Android
Android Использование сторонней библиотеки
Android Coockie, хранение PHPSESSID во время работы приложения
Android Принцип работы приложения
Android Изменение background layout 'а сторонней Activity
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,123
17.06.2016, 20:59     Рестарт при прерывании работы приложения сторонней службой #2
dimon4, покажите код
dimon4
4 / 4 / 0
Регистрация: 12.04.2016
Сообщений: 39
17.06.2016, 21:35  [ТС]     Рестарт при прерывании работы приложения сторонней службой #3
ща кратко... основные моменты, кусками...
манифест:
XML
1
2
3
4
5
6
7
        <activity android:name=".Starter">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".Action"></activity>
активити Starter:
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
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        // Создание фрагментов при первом запуске
        if (savedInstanceState == null) {
                    // фрагмент Главное меню
                    MainmenuFragment mMainmenuFragment = new MainmenuFragment();
                    mFragmentTransaction.addToBackStack("FRAGMENT_MAINMENU");
                    mFragmentTransaction.add(R.id.fragment_container, mMainmenuFragment);
                    mFragmentTransaction.commit();
 
.....
    @Override
    public void FragmentListener(String fragment, String action) {
        switch (fragment) {
            case "MAINMENU":
                switch (action) {
                    case "RESTART":
                        intent = new Intent(Starter.this, Action.class);
                        bundle = new Bundle();
                        bundle.putBoolean(getString(R.string.BackgroundMode), mBackgroundMode);
                        bundle.putBoolean(getString(R.string.ControlPanelMode), mControlPanelMode);
                        intent.putExtra("bundle", bundle);
                        startActivity(intent);
......
активити Action:
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
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        // Считываем настройки
        Bundle bundle = getIntent().getBundleExtra("bundle");
        mBackgroundMode = bundle.getBoolean(getString(R.string.BackgroundMode));
        mControlPanelMode = bundle.getBoolean(getString(R.string.ControlPanelMode));
...
 
    @Override
    public void onBackPressed() {
        if ( !dialogIsWinner ) save();
        super.onBackPressed();
    }
 
    @Override
    protected void onResume() {
 
        super.onResume();
        mObj = dataFragment.getObj();
        v.resume();
    }
 
    @Override
    protected void onPause() {
        dataFragment.setData(mObj);
        v.pause();
        super.onPause();
    }
что-то еще?

Добавлено через 1 минуту
криволапый я )) как спрятать текст? <spoiler><java>...</java></spoiler> на форуме не работает?

Добавлено через 15 минут
скажем так... при том звонке приложение как бы стартовало с нуля... т.е. открылось стартовое окно и сработало все что ниже savedInstanceState == null.

вопрос, почему так могло быть? ошибок не проскакивало.
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,123
17.06.2016, 22:38     Рестарт при прерывании работы приложения сторонней службой #4
dimon4, приложение как-то реагирует на звонки? я имею ввиду - заложена ли в него эта реакция? а если заложена - не происходит ли при этом старт с флагом FLAG_ACTIVITY_NEW_TASK и/или FLAG_ACTIVITY_SINGLE_TOP?
по самой проблеме - что-то такое у меня было: сворачивал приложение где были одна за другой открыты несколько активностей, при восстановлении у меня показывало сплэш (самую первую активность) потому что она была MAIN и LAUNCHER и она вроде как всегда запускается при нажатии на значок приложения даже если оно уже запущено и было просто свернуто - пришлось заводить в наследнике приложения статический флаг "я уже запущено" по которому сплэш не показывался.
dimon4
4 / 4 / 0
Регистрация: 12.04.2016
Сообщений: 39
17.06.2016, 23:00  [ТС]     Рестарт при прерывании работы приложения сторонней службой #5
звонки я не отлавливаю
"в наследнике приложения" - это что? т.е. в каждой активности свой флаг? типа цепочка из активностей сохранит флажки и все активности запустятся? а в каком порядке? а с какими параметрами?
сплэш-сплэшем... у меня беда другая. пользователь наделал строений в активности №2, а его выкинуло таким образом... некрасиво как то... при onPause в json объекты сохранить а в onResume оттуда их доставать? мне кажется это долго.

если б как-то отловить такой момент, там было б понятно почему так вылетает... я в этот момент просто игрался на телефоне отдельно от компа и позвонили... потом кучу раз пробовал и трубку взять, и трубку не взять при прицепленном в режиме отладки телефоне, но нет такого косяка больше... ((

Добавлено через 2 минуты
если, к примеру, приложению памяти мало, его как убьет, с ошибкой? или тихо, бесшумно?
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,123
18.06.2016, 07:29     Рестарт при прерывании работы приложения сторонней службой #6
dimon4, в наследнике - это нужно делать свой Application. Флажки делать не нужно - я лишь поведал о том что однажды вроде как наблюдал ситуацию когда возврат в приложение через нажатие на значек приложения приводит кроме автоматического восстановления состояния системой к нежелательному старту запускающей активности. Убьётся без ошибок
dimon4
4 / 4 / 0
Регистрация: 12.04.2016
Сообщений: 39
21.06.2016, 10:46  [ТС]     Рестарт при прерывании работы приложения сторонней службой #7
порылся на просторах интернета и нашел что (скорее всего) меня спасет от нежелательного убивания системой моего приложения - http://developer-android.unlimited-t...he-bitmap.html
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,123
21.06.2016, 10:50     Рестарт при прерывании работы приложения сторонней службой #8
dimon4, думаете шлепает приложение потому что у него много ресурсов и с кэшем его пощадит?
dimon4
4 / 4 / 0
Регистрация: 12.04.2016
Сообщений: 39
21.06.2016, 11:03  [ТС]     Рестарт при прерывании работы приложения сторонней службой #9
скажем так, там рисунков 1000шт. все на экране. маленькие конечно, но все равно что-то кушают.
т.к. опыта нет, я их храню по сути дважды: 1-й раз в прямо в списке объектов (без кэширования), второй раз во фрагменте для хранения (ну чтобы при переворотах все оттуда восстанавливалось). хотя конечно не могу понять почему картинка с разрешением 800*480пикселей (живущая в 2-х видах чернобелом цельном и цветном разбитом на части) так кушает память...
просто следующим этапом я буду все равно добиваться сохранения состояния, для чего мне в любом случае придется хранить эту тыщу изображений на диск, и в объекте избавляться от хранения битмапа, а иметь только ссылку на битмап.
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,123
21.06.2016, 11:19     Рестарт при прерывании работы приложения сторонней службой #10
dimon4, зачем 1000? карта что ли?
dimon4
4 / 4 / 0
Регистрация: 12.04.2016
Сообщений: 39
21.06.2016, 11:23  [ТС]     Рестарт при прерывании работы приложения сторонней службой #11
с картами еще не сталкивался, хотя тож планы есть... кстати, разбить карту на части это мысль!
это головоломка
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,123
21.06.2016, 11:34     Рестарт при прерывании работы приложения сторонней службой #12
dimon4, расскажите потом смогло ли оно спасти. мой прогноз (почему то) - нет
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2016, 12:12     Рестарт при прерывании работы приложения сторонней службой
Еще ссылки по теме:

Android Вызов метода перед завершением работы приложения
Android OnUpgrade сторонней БД из assets
Android Литература по работе андроид приложения со сторонней API
Android Как правильно сделать паузу в ходе работы приложения?
Android Добавление сторонней библиотеки

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

Или воспользуйтесь поиском по форуму:
dimon4
4 / 4 / 0
Регистрация: 12.04.2016
Сообщений: 39
21.06.2016, 12:12  [ТС]     Рестарт при прерывании работы приложения сторонней службой #13
конечно. вот только у меня больше не возникало такой ошибки ни разу а постоянно сидеть и ждать эту ошибку с телефоном в режиме отладки не будешь...
просто прочитал ту статейку, подумал что так будет лучше.
Yandex
Объявления
21.06.2016, 12:12     Рестарт при прерывании работы приложения сторонней службой
Ответ Создать тему
Опции темы

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