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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено через 2 минуты
если, к примеру, приложению памяти мало, его как убьет, с ошибкой? или тихо, бесшумно?
0
vxg
Модератор
3292 / 2086 / 330
Регистрация: 13.01.2012
Сообщений: 8,119
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
Модератор
3292 / 2086 / 330
Регистрация: 13.01.2012
Сообщений: 8,119
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
Модератор
3292 / 2086 / 330
Регистрация: 13.01.2012
Сообщений: 8,119
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
Модератор
3292 / 2086 / 330
Регистрация: 13.01.2012
Сообщений: 8,119
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
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2016, 12:12

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

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

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


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

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

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