我正在编写Android代码段来帮助跟踪Android事件作为应用开发人员的服务工具。适用于应用生命周期的Android事件监听器
例如,主应用程序主体可以只显示'你好世界'。我的代码将收听应用事件,例如onStart()
,onResume()
,onDestroy()
等,并对这些事件保持跟踪。
当然,代码可以直接插入到主要活动中。但这意味着我的代码将遍布各个地方。有没有办法,我可以创建一个对象(即一个侦听器),并且只请求应用程序开发人员添加1〜2个班轮来使用我的代码?
我正在编写Android代码段来帮助跟踪Android事件作为应用开发人员的服务工具。适用于应用生命周期的Android事件监听器
例如,主应用程序主体可以只显示'你好世界'。我的代码将收听应用事件,例如onStart()
,onResume()
,onDestroy()
等,并对这些事件保持跟踪。
当然,代码可以直接插入到主要活动中。但这意味着我的代码将遍布各个地方。有没有办法,我可以创建一个对象(即一个侦听器),并且只请求应用程序开发人员添加1〜2个班轮来使用我的代码?
对于API Level 14及更高版本,您可以使用call registerActivityLifecycleCallbacks()
on the Application
来设置一个侦听器,以通知活动生命周期事件。
试试这个办法
public class mYApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new MyLifecycleHandler());
}
}
MyLifecycleHandler:
public class MyLifecycleHandler implements Application.ActivityLifecycleCallbacks {
private static int resumed;
private static int paused;
private static int started;
private static int stopped;
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
++resumed;
}
@Override
public void onActivityPaused(Activity activity) {
++paused;
android.util.Log.w("test", "application is in foreground: " + (resumed > paused));
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityStarted(Activity activity) {
++started;
}
@Override
public void onActivityStopped(Activity activity) {
++stopped;
android.util.Log.w("test", "application is visible: " + (started > stopped));
}
public static boolean isApplicationVisible() {
return started > stopped;
}
public static boolean isApplicationInForeground() {
return resumed > paused;
}
}
,然后调用isApplicationInForeground
静态方法来检查,如果应用程序在前台或后台
感谢。 registerActivityLifecycleCallbacks()可能是我正在寻找的正确的一个。 –
查看Cornstalk的答案在这里 - http://stackoverflow.com/questions/3667022/android-is-application-running-in-background/5862048 - 为如何使用它的一个很好的例子。 –