解決如何監(jiān)聽Activity切換
來源:程序員人生 發(fā)布時間:2014-09-18 03:29:56 閱讀次數(shù):5197次
本篇博文在我之前的博文中已經(jīng)提到了,但是監(jiān)聽Activity切換又可以作為一個單獨的內(nèi)容來敘述,因此這里又單獨拿了出來進(jìn)行贅述。
Activity的切換無非有兩種,第一種:啟動或者創(chuàng)建一個新的Activity;第二種:喚醒后臺運行的Activity。因此如果我們能夠成功監(jiān)聽到啟動或者創(chuàng)建一個Activity,或者喚醒Activity我們就基本完成了Activity的切換的監(jiān)聽。
在源碼/frameworks/base/core/java/android/app目錄下ActivityThread.java中為我們提供了這樣一個方法來幫助我們完成對Activity啟動、創(chuàng)建、銷毀、暫停、停止,喚醒等生命周期的監(jiān)聽。
-
public void handleMessage(Message msg) {
-
if (DEBUG_MESSAGES) Slog.v(TAG, ">>> handling: " + codeToString(msg.what));
-
switch (msg.what) {
-
case LAUNCH_ACTIVITY: {
-
-
if ( true == mEnableAppLaunchLog && !mIsUserBuild && false == mTraceEnabled ) {
-
try {
-
FileInputStream fprofsts_in = new FileInputStream("/proc/mtprof/status");
-
if ( fprofsts_in.read()== '3' ) {
-
Log.v(TAG, "start Profiling for empty process");
-
mTraceEnabled = true;
-
Debug.startMethodTracing("/data/data/applaunch");
-
}
-
} catch (FileNotFoundException e) {
-
Slog.e(TAG, "mtprof entry can not be found", e);
-
} catch (java.io.IOException e) {
-
Slog.e(TAG, "mtprof entry open failed", e);
-
}
-
}
-
-
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER | Trace.TRACE_TAG_PERF, "activityStart");
-
ActivityClientRecord r = (ActivityClientRecord)msg.obj;
-
-
r.packageInfo = getPackageInfoNoCheck(
-
r.activityInfo.applicationInfo, r.compatInfo);
-
handleLaunchActivity(r, null);
-
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER | Trace.TRACE_TAG_PERF);
-
} break;
-
case RELAUNCH_ACTIVITY: {
-
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "activityRestart");
-
ActivityClientRecord r = (ActivityClientRecord)msg.obj;
-
handleRelaunchActivity(r);
-
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
-
} break;
-
case PAUSE_ACTIVITY:
-
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "activityPause");
-
handlePauseActivity((IBinder)msg.obj, false, msg.arg1 != 0, msg.arg2);
-
maybeSnapshot();
-
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
-
break;
-
case PAUSE_ACTIVITY_FINISHING:
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈