Android經常使用代碼備份

獲取當前界面的Activity名稱

adb logcat | grep ActivityManagerjava

關於aidl

在Android工程中, 建立xxxx.aidl文件,編譯後,會生成一個xxxx.java文件,這個文件裏生成Stub抽象類繼承android.os.Binder、實現aidl中聲明的方法。而後工程裏建立一個service類android

Android Activity生命週期

進入到一個Activity
onCreate -> onStart -> onResume

App進入後臺
onPause -> onStop

關閉Activity
onPause -> onStop -> onDestroy

App頁面跳轉
onPause -> onStop

重回Activity
onRestart -> onStart -> onResume

總結就是: 界面出現 -> onStart, 界面消失 -> onStop
         界面建立 -> onCreate, 界面摧毀 -> onDestroy

Android App啓動時類的加載順序

在工程的AndroidManifest.xmlapplication中定義android:name屬性,到具體的類,App啓動時就首先加載這個類。而後再加載在AndroidManifest.xml中定義爲android.intent.category.LAUNCHER的類shell

BroadcastReceiver 註冊有兩種方式

1. 靜態註冊

須要過濾的filtAction寫在AndroidManifest.xml裏
好比:app

<receiver android:name=".MyBroadcastReceiver"
          android:exported="false" >
<!--intent過濾器,指定能夠匹配哪些intent, 通常須要定義action 能夠是自定義的也但是系統的-->
    <intent-filter>
        <action android:name="com.app.broadcast"/>
    </intent-filter>
</receiver>
2. 動態註冊
MyBroadcastReceiver myReceiver = new MyBroadcastReceiver();
IntentFilter fileter = new IntentFilter();
fileter.addAction("com.app.broadcast");
MainActivity.this.registerReceiver(myReceiver, fileter);
3. 發送通知:
Intent intent = new Intent("");
this.sendBroadcast(intent);

截圖

adb shell screencap -p | perl -pe 's/\x0D\x0A/\x0A/g' > screen.png

關於Handler

應用啓動時,Android FrameWork建立一個Looper對象,處理MessageQueue裏的Message
建立一個Hander後,MessageQueue對象會持有這個Handler的引用
Looper處理Handler時,就觸發Handler的handleMessage(Message)方法ide

內部匿名類和內部非靜態類會有一個對外部類的隱式引用oop

若是Handler長時間不執行,當前類的內存不會被釋放post

事例代碼
public class SampleActivity extends Activity {

  /**
   * Instances of static inner classes do not hold an implicit
   * reference to their outer class.
   */
  private static class MyHandler extends Handler {
    private final WeakReference<SampleActivity> mActivity;

    public MyHandler(SampleActivity activity) {
      mActivity = new WeakReference<SampleActivity>(activity);
    }

    @Override
    public void handleMessage(Message msg) {
      SampleActivity activity = mActivity.get();
      if (activity != null) {
        // ...
      }
    }
  }

  private final MyHandler mHandler = new MyHandler(this);

  /**
   * Instances of anonymous classes do not hold an implicit
   * reference to their outer class when they are "static".
   */
  private static final Runnable sRunnable = new Runnable() {
      @Override
      public void run() { /* ... */ }
  };

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Post a message and delay its execution for 10 minutes.
    mHandler.postDelayed(sRunnable, 1000 * 60 * 10);
    
    // Go back to the previous Activity.
    finish();
  }
}
相關文章
相關標籤/搜索