Android: как проверить, активна ли активность?

Если Вы говорите о затененном глобальном var, то (на Linux) можно использовать dlsym() для нахождения адреса глобальной переменной, как это:

int myvar = 5;    // global

{
    int myvar = 6;    // local var shadows global
    int *pglob_myvar = (int *)dlsym(RTLD_NEXT, "myvar");
    printf("Local: %d, global: %d\n", myvar, *pglob_myvar);
}

, Если Вы хотите, чтобы Ваш код выглядел сексуальным, используйте макрос:

#define GLOBAL_ADDR(a,b)  b =(typeof(b))dlsym(RTLD_NEXT, #a)
...
int *pglob_myvar;
GLOBAL_ADDR(myvar, pglob_myvar);
...
139
задан Undo 1 December 2016 в 15:27
поделиться

2 ответа

Если Вы хотите проверить, находится ли действие в задней стопке, просто выполняют следующие шаги. 1. Объявленный ArrayList в Вашем Классе приложений [Класс приложений определяется в Вашем явном файле в теге приложения]

private ArrayList<Class> runningActivities = new ArrayList<>();
  1. , И добавьте следующие открытые методы получить доступ и изменить этот список.

    public void addActivityToRunningActivityies (Class cls) {
    if (!runningActivities.contains(cls)) runningActivities.add(cls);
    }
    
    public void removeActivityFromRunningActivities (Class cls) {
    if (runningActivities.contains(cls)) runningActivities.remove(cls);
    }
    
    public boolean isActivityInBackStack (Class cls) {
    return runningActivities.contains(cls);
    }
    
  2. В Вашем BaseActivity, где все операции расширяют его, onCreate переопределения и onDestroy методы, таким образом, можно добавить и удалить операции из задней стопки как следующее.

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    ((MyApplicationClass)getApplication()).addActivityToRunningActivityies
    (this.getClass());
    }
    
    @Override
    protected void onDestroy() {
    super.onDestroy();
    
    ((MyApplicationClass)getApplication()).removeActivityFromRunningActivities
    (this.getClass());
    }
    
  3. Наконец, если Вы хотите проверить, является ли действие в задней стопке или не только вызывает эту функцию isActivityInBackStack.

Исключая: Я хочу проверить если HomeActivityis в заднюю стопку или нет:

if (((MyApplicationClass) 
getApplication()).isActivityInBackStack(HomeActivity.class)) {
       // Activity is in the back stack
    } else {
       // Activity is not in the back stack
    }
1
ответ дан 23 November 2019 в 23:18
поделиться
public static boolean isActivityActive(Activity activity) {
    return !activity.isFinishing() &&
            (SDK_INT < JELLY_BEAN_MR1 || !activity.isDestroyed());
}
0
ответ дан 23 November 2019 в 23:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: