程序员人生 网站导航

解决如何监听Activity切换

栏目:互联网时间:2014-09-18 03:29:56

    本篇博文在我之前的博文中已经提到了,但是监听Activity切换又可以作为一个单独的内容来叙述,因此这里又单独拿了出来进行赘述。

    Activity的切换无非有两种,第一种:启动或者创建一个新的Activity;第二种:唤醒后台运行的Activity。因此如果我们能够成功监听到启动或者创建一个Activity,或者唤醒Activity我们就基本完成了Activity的切换的监听。

  在源码/frameworks/base/core/java/android/app目录下ActivityThread.java中为我们提供了这样一个方法来帮助我们完成对Activity启动、创建、销毁、暂停、停止,唤醒等生命周期的监听。

  

[java] view plaincopyprint?
  1. public void handleMessage(Message msg) {  
  2.             if (DEBUG_MESSAGES) Slog.v(TAG, ">>> handling: " + codeToString(msg.what));  
  3.             switch (msg.what) {  
  4.                 case LAUNCH_ACTIVITY: {  
  5.                     /// M: enable profiling @{  
  6.                     if ( true == mEnableAppLaunchLog && !mIsUserBuild && false == mTraceEnabled ) {  
  7.                         try {  
  8.                             FileInputStream fprofsts_in = new FileInputStream("/proc/mtprof/status");  
  9.                             if ( fprofsts_in.read()== '3' ) {  
  10.                                 Log.v(TAG, "start Profiling for empty process");  
  11.                                 mTraceEnabled = true;  
  12.                                 Debug.startMethodTracing("/data/data/applaunch"); //applaunch.trace  
  13.                             }  
  14.                         } catch (FileNotFoundException e) {  
  15.                             Slog.e(TAG, "mtprof entry can not be found", e);  
  16.                         } catch (java.io.IOException e) {  
  17.                             Slog.e(TAG, "mtprof entry open failed", e);  
  18.                         }  
  19.                     }  
  20.                     /// @}  
  21.                     Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER | Trace.TRACE_TAG_PERF, "activityStart"); /// M: add TRACE_TAG_PERF for performance debug  
  22.                     ActivityClientRecord r = (ActivityClientRecord)msg.obj;  
  23.   
  24.                     r.packageInfo = getPackageInfoNoCheck(  
  25.                             r.activityInfo.applicationInfo, r.compatInfo);  
  26.                     handleLaunchActivity(r, null);  
  27.                     Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER | Trace.TRACE_TAG_PERF); /// M: add TRACE_TAG_PERF for performance debug  
  28.                 } break;  
  29.                 case RELAUNCH_ACTIVITY: {  
  30.                     Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "activityRestart");  
  31.                     ActivityClientRecord r = (ActivityClientRecord)msg.obj;  
  32.                     handleRelaunchActivity(r);  
  33.                     Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);  
  34.                 } break;  
  35.                 case PAUSE_ACTIVITY:  
  36.                     Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "activityPause");  
  37.                     handlePauseActivity((IBinder)msg.obj, false, msg.arg1 != 0, msg.arg2);  
  38.                     maybeSnapshot();  
  39.                     Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);  
  40.                     break;  
  41.                 case PAUSE_ACTIVITY_FINISHING:  
------分隔线----------------------------
------分隔线----------------------------

最新技术推荐