Определить, как долго отображается приложение Android (не мое)

Я пишу приложение, которое должно знать, как долго то или иное приложение видно пользователю.

Есть ли какое-либо общесистемное событие, которое моя служба может получить, когда приложение открыто и когда оно больше не видно пользователю (onStop())? Или мне нужно прибегать к периодическому опросу ActivityManager?

Tasker приложений (http://tasker.dinglisch.net), по-видимому, способен обнаруживать, когда какое-либо данное приложение видно/невидимо. Они просто опрашивают ActivityManager или есть какой-то другой способ сделать это?

Ссылка:
Время работы приложения
Как узнать, как долго приложение работает в Android?


person dabrain13    schedule 15.06.2012    source источник


Ответы (1)


Вы можете определить, видимо ли ваше приложение, следующим образом:

Во всей вашей деятельности установите:

@Override
protected void onResume() {
super.onResume();

VisibilityManager.setIsVisible(true);
}

@Override
protected void onPause() {
VisibilityManager.setIsVisible(false);

super.onPause();
}

(это может привести к тому, что вы определите суперкласс для всех ваших действий, которые будут реализовывать это поведение)

Затем создайте VisibilityManager (это очень простой, вам может понадобиться что-то более сложное):

public class VisibilityManager {
private boolean mIsVisible = false;

public void setIsVisible(boolean visible) { 
     mIsVisible = visible; 
}

public boolean getIsVisible() {
     return mIsVisible;
}
}

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

if (VisibilityManager.getIsVisible()) {
finish();
}
else {
showNotification();
}
person Hip Hip Array    schedule 15.06.2012
comment
К сожалению, это работает только в том случае, если я слежу за своим собственным приложением. Однако мне нужно иметь возможность определять время выполнения ДРУГИХ приложений, которые не принадлежат мне. В настоящее время я просматриваю исходный код SpareParts, чтобы узнать, как они это делают. - person dabrain13; 15.06.2012