Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
dimon4
4 / 4 / 0
Регистрация: 12.04.2016
Сообщений: 39
#1

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

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

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

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

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

Литература по работе Android-приложения со сторонней API
Подскажите хорошие обучающие материалы(и не очень) для того чтобы, понять (и...

Полное завершение работы приложения при нажатии навигационной кнопки "Назад"
Здравствуйте. Имеется приложение. При нажатии кнопки "Домой" приложение выходит...

Сделать рестарт сторонней программы
Доброе время суток! Банальное оповещение. Я начинающий человечек в этой сфере....

Автоматический рестарт при неожиданном завершение приложения
Ребят вот скрипт, который запускает игровой сервер: #Source Dedicated Server...

Работа приложения со службой
Подскажите, как реализовывается общение приложения со службой? Допустим есть...

Рестарт приложения
Нужно перезапускать приложение привозникновении любой ошибки(возвращаться к...

12
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,886
17.06.2016, 20:59 #2
dimon4, покажите код
0
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.

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

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

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

Рестарт приложения
Можно ли сделать, чтобы exe приложение перезапускало само себя?

Рестарт консольного приложения
Как можно реализовать рестарт консольного приложения (использую VS 2012)?...

Запуск приложения Службой под определенным юзером
Приветствую. Подскажите, плиз, что нужно сделать, что бы приложение ({$APPTYPE...

Зависание или рестарт Windows 7 после некоторого времени нормальной работы (на ХР всё ОК)
Уважаемые форумчане, у меня несколько др. случай, но по теме. На ПК в течение...


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

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

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