2014-03-03 94 views
5

我想記錄從不同入口點恢復/創建時的應用程序狀態。從不同導航狀態中檢測應用程序恢復的狀態android

  • 應用從應用程序的抽屜打開
  • 的應用被通知
  • 應用程序從打開的應用程序打開(龍家按)打開
  • 應用程序與其他屏幕

我恢復知道它可以通過生成一個基本活動和覆蓋恢復/暫停事件來追蹤,但我有大量活動存在於應用程序中。那麼是否有任何簡短的方法來獲得應用程序的狀態?


我想到了創建服務,並不斷地檢查當前正在運行的任務,但如果我找到了一種方法來運行服務,只有當我的活動處於可見狀態我只能用這種方式。 (在每個活動是綁定服務是不實際的對我來說)

回答

1

你的建議的解決方案聽起來不錯:

public class YourBaseActivity extends Activity { 

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

     ActivityManager mgr = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
     List<ActivityManager.RunningTaskInfo> tasks = mgr.getRunningTasks(1); 

     tasks.get(0).topActivity.getClassName(); 

     //Do what you need to do with it... 
    } 
} 

而讓所有的活動擴展該替代活動應該爲你

工作

編輯 另一種方式來做到這一點:

創建流氮肥類,並實現Application.ActivityLifecycleCallbacks,代碼的工作示例:

public class ApplicationTest extends Application implements Application.ActivityLifecycleCallbacks { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     registerActivityLifecycleCallbacks(this); 
    } 

    @Override 
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) { 
    } 

    @Override 
    public void onActivityDestroyed(Activity activity) { 
    } 

    @Override 
    public void onActivityPaused(Activity activity) { 
    } 

    @Override 
    public void onActivityResumed(Activity activity) { 
     Log.d("testing", "onActivityResumed"); 
    } 

    @Override 
    public void onActivitySaveInstanceState(Activity activity, Bundle outState) { 
    } 

    @Override 
    public void onActivityStarted(Activity activity) { 
    } 

    @Override 
    public void onActivityStopped(Activity activity) { 
    } 
} 

和參考這個類在你的清單:

<application 
    ... 
    android:name="com.example.testing.ApplicationTest" > 
+1

吉列爾莫,我的朋友,這就是我們其實都知道,我們不」不想那樣做,請提供其他解決方案。這是不可接受的。 – MKJParekh

+0

嗨@MKJParekh我用另一種解決方案編輯了我的答案,請檢查它 –

+0

當我們在應用程序內導航時,是否調用回調?如果我開始一項活動,我會爲其他人獲得onActivityPaused和onActivityResumed? –