Если Вы говорите о затененном глобальном 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);
...
Если Вы хотите проверить, находится ли действие в задней стопке, просто выполняют следующие шаги. 1. Объявленный ArrayList в Вашем Классе приложений [Класс приложений определяется в Вашем явном файле в теге приложения]
private ArrayList<Class> runningActivities = new ArrayList<>();
, И добавьте следующие открытые методы получить доступ и изменить этот список.
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);
}
В Вашем 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());
}
Наконец, если Вы хотите проверить, является ли действие в задней стопке или не только вызывает эту функцию isActivityInBackStack.
Исключая: Я хочу проверить если HomeActivityis в заднюю стопку или нет:
if (((MyApplicationClass)
getApplication()).isActivityInBackStack(HomeActivity.class)) {
// Activity is in the back stack
} else {
// Activity is not in the back stack
}
public static boolean isActivityActive(Activity activity) {
return !activity.isFinishing() &&
(SDK_INT < JELLY_BEAN_MR1 || !activity.isDestroyed());
}