2012-12-02 35 views
13

Tôi đang gặp khó khăn với sự cố trong ứng dụng của mình. Tôi muốn cung cấp một cách để liệt kê lịch sử của các hoạt động đã mở trước đó.Cách nhận danh sách ngăn xếp lịch sử hoạt động?

Tôi nghĩ có hai giải pháp tiềm năng nhưng tôi không chắc chắn sẽ tìm được cách ổn định để đạt được bất kỳ giải pháp nào trong số đó.

  • Bằng cách nào đó sử dụng chức năng từ SDK. Tôi đã thử sử dụng getPackageManager() và getActivityManager() nhưng tôi không thể tìm thấy giải pháp phù hợp
  • Thực hiện lịch sử của riêng mình nhưng sau đó tôi sẽ phải ghi đè startActivity và tôi thực sự không muốn đi theo cách đó dưới dạng hoạt động có thể được bắt đầu bằng nhiều cách khác.

Vậy có cách nào để thực hiện điều đó bằng cách sử dụng chức năng từ SDK không?

Rất cám ơn.

EDIT:

Tôi có một ý tưởng khác, có một chút khác biệt. Nó có thể lắng nghe các sự kiện "bắt đầu/kết thúc hoạt động" với một số loại máy thu cho một ứng dụng cụ thể (của tôi) và theo dõi lịch sử ngăn xếp không?

Trả lời

17

Vì vậy, có cách nào để thực hiện điều đó bằng cách sử dụng chức năng từ SDK không?

Không, xin lỗi.

Bạn có thể nghe các sự kiện "bắt đầu/kết thúc hoạt động" với một loại người nhận nào đó cho một ứng dụng cụ thể (tôi) và theo dõi lịch sử ngăn xếp không?

Bạn có thể sử dụng registerActivityLifecycleCallbacks() trên Application, nếu bạn chỉ đi để hỗ trợ API Level 14 và cao hơn (còn gọi là, Android 4.0+).

+0

Thật tuyệt, tôi không biết về điều đó! –

+0

Nếu chúng ta sử dụng registerActivityLifecycleCallbacks(), chúng ta có cần duy trì stack của riêng mình không? Tôi thực sự muốn một danh sách các ActivityRecords được hiển thị cho ứng dụng của tôi. Tôi thấy rằng "hoạt động hoạt động của dumpb shell dumpsys" hiển thị TaskRecord có các mục "Hist #" mulitple là ActivityRecords. Tôi muốn có một danh sách các ActivityRecords này; ít nhất là tên lớp hoạt động. Tôi không tìm thấy bất kỳ phương pháp có được điều này. Đây là với ref. cho câu hỏi của tôi: http://stackoverflow.com/questions/30095772/get-thumbnail-screenshot-of-activities-in-back-stack-of-android?noredirect=1#comment48303570_30095772 – AndroidGuy

+0

@AndroidGuy: "chúng ta có cần duy trì ngăn xếp của chính chúng ta? " - nếu bạn muốn một chồng, vâng. – CommonsWare

4

bạn có thể sử dụng các phương pháp sau đây:

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()); 
} 

có được một danh sách các hoạt động ngăn xếp.

+0

Tôi không phải là một fan hâm mộ lớn của phương pháp này, nó được chỉ định trong tài liệu hướng dẫn nó chỉ nên được sử dụng cho một mục đích gỡ lỗi. thanks anyway :) –

+3

Điều đó chỉ cung cấp danh sách nhiệm vụ chứ không phải danh sách các hoạt động trong một ngăn xếp (một nhiệm vụ). Mỗi tác vụ chứa numActivities và những tác vụ đó không được liệt kê ở bất kỳ đâu. – 3c71

+2

Chỉ cần một bình luận. Nếu bạn muốn sử dụng phương thức đó, bạn phải thêm vào danh sách quyền trong Tệp kê khai Android. –

14

lệnh ADB Sử dụng:

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 

Sử dụng quản lý Hoạt động:

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

Một cách rất đơn giản để đạt được Lịch sử Hoạt động là với các lớp tên

xác định activity_history_list trong bạn mainActivity

public static List<String> activity_history_list; 

và trong mọi onStart() của mọi hoạt động bạn tạo (ví dụ MainActivity)

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

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

vào một hoạt động khác (ví dụ SettingActivity)

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

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

Bạn có thể truy cập vào activity_history_list bất cứ nơi nào miễn là nó static, bạn có thể in tất cả lịch sử cùng một lúc hoặc truy cập một hoạt động cụ thể trong lịch sử bằng cách index

Các vấn đề liên quan