Tôi đã thực hiện riêng của mình là Application.ActivityLifecycleCallbacks
. Tôi đang sử dụng SherlockActivity
, nhưng đối với lớp Hoạt động bình thường có thể hoạt động.
Thứ nhất, tôi là tạo ra một giao diện mà có tất cả các phương pháp để theo dõi các hoạt động chu kỳ:
public interface ActivityLifecycleCallbacks{
public void onActivityStopped(Activity activity);
public void onActivityStarted(Activity activity);
public void onActivitySaveInstanceState(Activity activity, Bundle outState);
public void onActivityResumed(Activity activity);
public void onActivityPaused(Activity activity);
public void onActivityDestroyed(Activity activity);
public void onActivityCreated(Activity activity, Bundle savedInstanceState);
}
Thứ hai, tôi thực hiện giao diện này trong lớp ứng dụng của tôi:
public class MyApplication extends Application implements my.package.ActivityLifecycleCallbacks{
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onActivityStopped(Activity activity) {
Log.i("Tracking Activity Stopped", activity.getLocalClassName());
}
@Override
public void onActivityStarted(Activity activity) {
Log.i("Tracking Activity Started", activity.getLocalClassName());
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
Log.i("Tracking Activity SaveInstanceState", activity.getLocalClassName());
}
@Override
public void onActivityResumed(Activity activity) {
Log.i("Tracking Activity Resumed", activity.getLocalClassName());
}
@Override
public void onActivityPaused(Activity activity) {
Log.i("Tracking Activity Paused", activity.getLocalClassName());
}
@Override
public void onActivityDestroyed(Activity activity) {
Log.i("Tracking Activity Destroyed", activity.getLocalClassName());
}
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
Log.i("Tracking Activity Created", activity.getLocalClassName());
}
}
Thứ ba, tôi đang tạo một lớp mở rộng từ SherlockActivity:
public class MySherlockActivity extends SherlockActivity {
protected MyApplication nMyApplication;
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
nMyApplication = (MyApplication) getApplication();
nMyApplication.onActivityCreated(this, savedInstanceState);
}
protected void onResume() {
// TODO Auto-generated method stub
nMyApplication.onActivityResumed(this);
super.onResume();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
nMyApplication.onActivityPaused(this);
super.onPause();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
nMyApplication.onActivityDestroyed(this);
super.onDestroy();
}
@Override
protected void onStart() {
nMyApplication.onActivityStarted(this);
super.onStart();
}
@Override
protected void onStop() {
nMyApplication.onActivityStopped(this);
super.onStop();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
nMyApplication.onActivitySaveInstanceState(this, outState);
super.onSaveInstanceState(outState);
}
}
Thứ tư, tất cả các lớp tha t mở rộng từ SherlockActivity, tôi thay thế cho MySherlockActivity:
public class MainActivity extends MySherlockActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
Bây giờ, trong logcat bạn sẽ thấy các bản ghi được lập trình trong việc thực hiện giao diện thực hiện trong MyApplication.
CẬP NHẬT
thực hiện này đã được thử nghiệm từ API Level 9 (Gingerbread), API Level 12 (Honeycomb) và API Cấp 17 (Jelly Bean) và hoạt động tốt. Có thể hoạt động trong các phiên bản cũ hơn của Android.
UPDATE: Các API chuẩn hiện nay đã được khoảng dài đủ rằng cuộn của riêng bạn của ClarkXP là quá mức cần thiết cho hầu hết các ứng dụng. Thay vào đó, hãy xem câu trả lời của @ Jeroen. Tôi tóm tắt/làm rõ là "Trong lớp gọi lại của bạn (có' triển khai Application.ActivityLifecycleCallbacks'), trong hàm tạo của nó làm 'getApplication(). RegisterActivityLifecycleCallbacks (this);' Nếu lớp của bạn có 'onCreate' hoặc' init' hoặc phương thức tương tự chạy khi cá thể trở thành hoạt động, đặt dòng đó ở đó chứ không phải trong hàm tạo (vì lớp có lẽ không muốn nhận các cuộc gọi lại cho đến khi nó hoàn toàn sẵn sàng). " – ToolmakerSteve