2012-12-02 14 views
13

मैं अपने ऐप में किसी समस्या के साथ संघर्ष कर रहा हूं। मैं पिछली खुली गतिविधियों के इतिहास को सूचीबद्ध करने का एक तरीका प्रदान करना चाहता हूं।गतिविधि इतिहास स्टैक की सूची कैसे प्राप्त करें?

मुझे लगता है कि दो संभावित समाधान हैं लेकिन मुझे यकीन है कि उनमें से किसी को प्राप्त करने के लिए एक स्थिर तरीका नहीं है।

  • किसी भी तरह एसडीके से किसी फ़ंक्शन का उपयोग करें। मैंने getPackageManager() और getActivityManager() प्राप्त करने का प्रयास किया लेकिन मुझे कोई उपयुक्त समाधान नहीं मिला
  • मेरे अपने इतिहास को लागू करें लेकिन फिर मुझे प्रारंभ गतिविधि को ओवरराइड करना होगा और मैं वास्तव में गतिविधि के रूप में उस तरह से नीचे नहीं जाना चाहता अन्य कई तरीकों से शुरू किया जा सकता है।

तो क्या एसडीके से किसी फ़ंक्शन का उपयोग करने का कोई तरीका है?

बहुत धन्यवाद।

संपादित करें:

मैं एक और विचार मिल गया है, यह थोड़ा अलग है। क्या किसी विशिष्ट प्रकार के रिसीवर के साथ "स्टार्ट/फिनिश गतिविधि" ईवेंट सुनना संभव होगा (एक विशिष्ट ऐप (मेरा) और स्टैक इतिहास का ट्रैक रखें?

उत्तर

17

तो क्या एसडीके से किसी फ़ंक्शन का उपयोग करने का कोई तरीका है?

नहीं, क्षमा करें।

क्या किसी विशिष्ट प्रकार के रिसीवर के साथ "स्टार्ट/फिनिश गतिविधि" घटनाओं को सुनना संभव होगा (एक विशिष्ट ऐप (मेरा) और स्टैक इतिहास का ट्रैक रखें?

आप Application पर registerActivityLifecycleCallbacks() उपयोग कर सकते हैं, यदि आप केवल एपीआई स्तर 14 और उच्च (यानी, Android 4.0+) का समर्थन करने के लिए जा रहे हैं।

ActivityManager am = (ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE); 

int sizeStack = am.getRunningTasks(2).size(); 

for(int i = 0;i < sizeStack;i++){ 

    ComponentName cn = am.getRunningTasks(2).get(i).topActivity; 
    Log.d("", cn.getClassName()); 
} 

गतिविधि ढेर की एक सूची प्राप्त:

+0

वास्तव में अच्छा, मुझे उस बारे में पता नहीं था! –

+0

यदि हम registerActivityLifecycleCallbacks() का उपयोग करते हैं, तो क्या हमें अपना खुद का ढेर बनाए रखने की आवश्यकता है? मैं वास्तव में अपने आवेदन के लिए प्रदर्शित गतिविधि रिकॉर्ड की एक सूची चाहता हूँ। मैं देखता हूं कि "एडीबी शैल डंपसिस गतिविधि गतिविधियां" एक टास्करेकॉर्ड प्रदर्शित करती है जिसमें "हिस्ट #" आइटम हैं जो गतिविधि रिकॉर्ड्स हैं। मुझे इन गतिविधि अभिलेखों की एक सूची चाहिए; कम से कम गतिविधि वर्ग के नाम। मुझे यह कोई तरीका नहीं मिला है। यह रेफरी के साथ है। मेरे प्रश्न पर: http://stackoverflow.com/questions/30095772/get- थंबनेल-स्क्रीनशॉट-of-activities-in-back-stack-of-android?noredirect=1#comment48303570_30095772 – AndroidGuy

+0

@AndroidGuy: "क्या हमें इसकी आवश्यकता है अपना खुद का ढेर बनाए रखें? " - अगर आप एक ढेर चाहते हैं, हाँ। – CommonsWare

4

आप निम्न विधि का उपयोग कर सकते हैं।

+0

मैं इस विधि का एक बड़ा प्रशंसक नहीं हूं, यह दस्तावेज़ीकरण में निर्दिष्ट है, इसे केवल डीबग उद्देश्य के लिए उपयोग किया जाना चाहिए। वैसे भी धन्यवाद :) –

+3

यह केवल कार्यों की सूची प्रदान करता है, न कि एक ढेर में गतिविधियों की सूची (एक कार्य)। प्रत्येक कार्य में numActivities शामिल हैं और वे कहीं भी सूचीबद्ध नहीं हैं। – 3c71

+2

बस एक टिप्पणी। यदि आप उस विधि का उपयोग करना चाहते हैं तो आपको एंड्रॉइड मैनिफेस्ट में अनुमतियों की सूची में <उपयोग-अनुमति एंड्रॉइड: name = "android.permission.GET_TASKS" /> जोड़ना होगा। –

14

का उपयोग करते हुए एडीबी कमांड:

1. adb shell dumpsys activity activities -> displays list of activities in back stack 

2. adb shell dumpsys activity process -> displays list process in back stack 

3. adb shell dumpsys activity intents -> displays list of pending intents in back stack 

4. adb shell dumpsys activity broadcast -> displays list of broadcast in back stack 

5. adb shell dumpsys activity services -> displays list of services running in back stack 

गतिविधि प्रबंधक का उपयोग करना:

ActivityManager m = (ActivityManager) ctx.getSystemService(ctx.ACTIVITY_SERVICE); 
    List<RunningTaskInfo> runningTaskInfoList = m.getRunningTasks(10); 
    Iterator<RunningTaskInfo> itr = runningTaskInfoList.iterator(); 
    while(itr.hasNext()){ 
     RunningTaskInfo runningTaskInfo = (RunningTaskInfo)itr.next(); 
     int id = runningTaskInfo.id; 
     CharSequence desc= runningTaskInfo.description; 
     int numOfActivities = runningTaskInfo.numActivities; 
     String topActivity = runningTaskInfo.topActivity.getShortClassName(); 
} 
0

एक बहुत ही सरल तरीका गतिविधि इतिहास प्राप्त करने के लिए वर्गों के साथ नाम

अपने mainActivity

में activity_history_list परिभाषित है
public static List<String> activity_history_list; 

और हर गतिविधि के हर onStart() में आपके द्वारा बनाए गए में

@Override 
    public void onStart() { 
     super.onStart(); 

     activity_history_list.add(MainActivity.this.getClass().getSimpleName()); 
    } 

(उदाहरण MainActivity के लिए) एक अन्य गतिविधि

@Override 
     public void onStart() { 
      super.onStart(); 

      MainActivity.activity_history_list.add(SettingActivity.this.getClass().getSimpleName()); 
     } 

आप activity_history_list कहीं भी रूप में लंबे समय यह है के रूप में उपयोग कर सकते हैं (उदाहरण के SettingActivity के लिए) static, आप सभी इतिहास को एक बार में प्रिंट कर सकते हैं या इतिहास में एक विशिष्ट गतिविधि तक पहुंच सकते हैं index