我正在编写一个应用程序,它需要知道任何给定的应用程序对用户可见多长时间。
当应用程序打开并且用户不再可见时(onStop()),我的服务是否可以接收任何系统范围的事件?还是我必须求助于定期轮询 ActivityManager?
应用程序 Tasker( http://tasker.dinglisch.net ) 似乎能够检测到任何给定应用程序何时可见/不可见。他们只是简单地轮询 ActivityManager,还是有其他方法可以解决这个问题?
我正在编写一个应用程序,它需要知道任何给定的应用程序对用户可见多长时间。
当应用程序打开并且用户不再可见时(onStop()),我的服务是否可以接收任何系统范围的事件?还是我必须求助于定期轮询 ActivityManager?
应用程序 Tasker( http://tasker.dinglisch.net ) 似乎能够检测到任何给定应用程序何时可见/不可见。他们只是简单地轮询 ActivityManager,还是有其他方法可以解决这个问题?
您可以通过以下方式检测您的应用是否可见:
在您的所有活动中,设置:
@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();
}