我正在編寫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 - 爲如何使用它的一個很好的例子。 –