Android 筆記

  每一個android應用程序都在他自己的進程中運行,都有一個獨立的Dalvik虛擬機實例,防止虛擬器崩潰時所有的chengx。Dalvik虛擬機是基於寄存器的,JVM是基於棧的。

應用解析:

1.Activity:用戶所能看到的屏幕,用來處理應用的整體性工作。如監聽系統事件、為用戶顯示指定的View、啟動其他的activity等。

2.Intent:實現activity之間的切換。Intent描述應用想做什麼,是應用程序的意圖。Intent數據結構包括動作和動作所對應的數據。動作對應的數據用URI來進行表示。與之對應的是一個intentfilter,描述activity或intentreceiver能夠操作那些intent,intentfilter要知道怎麼去處理動作和URI,需要在AndroidManifest.xml中聲明。調用startActivity(intent)實現activity的切換。重復利用intent,產生新的activity。

Intent showNextPage_intent = new Intent();
showNextPage_intent.setClass(this,NextPageActivity.class);
startActivity(showNextPage_intent);

3.IntentReceiver:對外部的事件進行響應,可以在AndroidManifest.xml和Context.registerReceiver()中註冊。

4.Service:具有生命周期的一種服務。使用Context.startService()來啟動一個service,並在後臺運行該服務。Context.bindService()綁定到一個service上,通過service提供的接口與他進行通信,比如播放器的暫停,重播等操作。

生命周期:1>startService開始,stopService結束。

                2>與bindService進程同生共死,或者調用unbindService結束。

                3>混合使用需要stopservice和unbindService都結束,Service終止。

使用服務:Context.startService();Context.bindService()兩種方式。

//音樂播放器的service實例//Manifest.xml中的Service定義
<service android:name=".Music">
 <intent-filter>
  <action android:name="com.liangshan.wuyong.START_AUDIO_SERVICE" />
  <category android:name="android.intent.category.default" />
 </intent-filter>
</service>
//Service子類中的Player
public void onStart(Intent intent, int startId) {
  super.onStart(intent, startId);
  player = MediaPlayer.create(this, R.raw.seven_days);
  player.start();
}
public void onDestroy() {
  super.onDestroy();
  player.stop();
}
//Activity 中定義的Intent開啟相應的Service
startService(new Intent("com.gruden.sy.START_AUDIO_SERVICE"));
stopService(new Intent("com.gruden.sy.START_AUDIO_SERVICE"));

5.ContentProvider:數據共享,針對不同應用包或程序之間實現數據共享的解決方案。

6.Bundle:使用Bundle在activity之間傳輸數據,和activity及Intent聯系較為密切。

//數據寫入Intent
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("key_Name","NAME");
bundle.putString("Key_Salary",Salary);
intent.putExtras(bundle);
intent.setClass(this,NewActivity.class);
startActivity();

//從intnet中獲取數據
Bundle bundle = this.getIntent().getExtras(); //get bundle
String name = bundle.getString("Key_Name");
String salary = bundle.getString("Key_Salaray");
setTitle(name+'-'+salary);

 另外一種在Activity間傳遞數據的方式intnet把服務請 求發送到目標Activity,在源請求Activity中沖在onActivity()方法等待Intent返回應答結果。

startActivity(intent,REQUEST_ASK);//開啟intent時同時捎帶上請求

//重載onActivityResult()
void onActivityResult(int requestCode,int resultCode,Intent data){
    super.onActivityResult(requestCode,resultCode,data);
    if(requestCode == REQUEST_ASK){
       if(reulstCode == RESULT_CANCELed){
          setTitle("cancel…");
       }else if(ResultCode == RESULT_OK){
          showBundle = data.getExtras();
          Name = Bundle.getString("myName");
       }
    }
}

 目標Activity中發送結果代碼,連同源請求的數據一起綁定到Bundle中通過Intent傳回請求activity中去。

bundle.putString("Name",NAME);
intent.putExtras(bundle);
setResult(RESULT_OK,intent);//通過Intent返回結果
finish();

發佈留言