Активность возобновляется при вызове из службы - PullRequest
0 голосов
/ 23 сентября 2018

В моем приложении есть служба плавающей кнопки (например, мессенджер facebook), и при нажатии моя активность возвращается из фона, но не возвращается так же, как при минимизации, она начинается зановоВызывая onCreate еще раз, есть идеи, что вызывает такое поведение?

В моем манифесте активность имеет свойство:

            android:launchMode="singleTask"

, и он вызывается моим сервисом так:

    Intent i = new Intent(FloatingViewService.this, DrawerActivity2.class);
    i.putExtra("fromController",true);
    i.setFlags(FLAG_FROM_BACKGROUND);
    FloatingViewService.this.startActivity(i);

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

После обновления это моя активность вманифест

        <activity
        android:name=".DrawerActivity2"
        android:configChanges="orientation"
        android:launchMode="singleTop"
        android:screenOrientation="portrait"
        android:theme="@style/OtherTheme"/>

ОБНОВЛЕНИЕ 2

Стоит упомянуть, это библиотека, которая находится в приложении.

Я пробовал этокод для открытия действия:

Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName()); startActivity(intent);

, и он открыл первое (из исходного приложения) действие, а не открытое.

любая помощь будет оценена

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Я мог только представить, что означает ваш FLAG_FROM_BACKGROUND.И мне интересно, вызвано ли это так, потому что раньше у вас были некоторые сбои с чем-то вроде «активность могла быть запущена без FLAG_NEW_TASK из applicationContext bla bla».Как бы то ни было.

Так что, если у вас есть Intent.FLAG_ACTIVITY_NEW_TASK, вы всегда получите экземпляр DrawerActivity2 в NEW_TASK .Это всегда будет, вы знаете, «новый» вид деятельности.И изменение launchMode на singleTop не даст ожидаемого результата. Читайте о launchModes и Flags здесь

Обратите внимание, что вы не можете запускать Activity в пределах того же TASK с ApplicationContext (или BaseContext/ContextWrapper, который расширяется Service).Для этой цели вам нужно использовать контекст действия для начиная с нового Activity

И около Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName()); startActivity(intent); Возможно, это работает какОжидаемый

Текущая реализация сначала ищет основное действие в категории Intent.CATEGORY_INFO, а затем основное действие в категории Intent.CATEGORY_LAUNCHER.Возвращает ноль, если ничего не найдено.

источник для разработчиков Android

И вы спрашиваете

моя активность возвращается из фона,он начинает снова вызывать onCreate, есть идеи, что вызывает такое поведение?

Мое предположение FLAG_FROM_BACKGROUND :

Intent i = new Intent(FloatingViewService.this, DrawerActivity2.class);
    i.putExtra("fromController",true);
    i.setFlags(FLAG_FROM_BACKGROUND); /*is it really Intent.FLAG_ACTIVITY_NEW_TASK ???*/
    FloatingViewService.this.startActivity(i);

Как это исправить?Вероятно, чтобы начать деятельность с ActivityContext вместо ApplicationContext.Но это другая история.И не могу рекомендовать «хороший» способ, как это реализовать.

0 голосов
/ 28 сентября 2018

Я думаю, что если вы используете launchMode singleTop и i.setFlags (FLAG_ACTIVITY_NEW_TASK), это должно сработать, но только если действие находится на вершине стека.

Если вы не можете гарантировать, что действие находится на вершинестек, стоит попробовать установить launchMode в singleTask и i.setFlags (FLAG_ACTIVITY_NEW_TASK)

0 голосов
/ 26 сентября 2018

Вам нужно:

<activity
        android:name=".DrawerActivity2"
        android:launchMode = "singleInstance" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...