1. 程式人生 > >安卓高階技巧(一)

安卓高階技巧(一)

  • 全域性獲取Context的技巧

Android提供了一個Application類,每當應用程式啟動的時候,系統就會自動將這個類進行初始化。而我們可以定製一個自己的Application類,以便於管理程式內一些全域性的狀態資訊,比如全域性Context。

 示例如下:

public class MyApplication extends Application{

private static Context context;

@Override

public void onCreate(){

context=getApplicationContext();

}

public static Context getContext(){

return context;

}

}

這裡我們重寫了父類的onCreate()方法,並通過呼叫getApplicationContext()方法得到了一個應用程式級別的Context,然後提供了一個靜態的getContext()方法,返回剛才賦值的context。

接下來我們需要告知系統,當程式啟動的時候應該初始化MyApplication類,而不是預設的Application類。即是在AndroidManifest.xml檔案的<application>標籤下進行指定就可以了,程式碼如下所示

<application

          android:name=”com.example.XXX.MyApplication”

        …>

解決與LitePal衝突的問題:

在MyApplication類的onCreate()中新增語句:LitePal.initialize(context);

  • 使用Intent傳遞物件
    • Serializable

Serializable是序列化的意思,表示將一個物件轉換成可儲存或可傳輸的狀態。序列化後的物件可以在網路上進行傳輸,也可以儲存本地。至於序列化的方法,只要讓一個類去實現Serializable這個介面就行了。

示例如下:

public class Person implements Serializable{

private String name;

public String getName(){

return name;

}

Public void setName(String name){

this.name=name;

}

}

然後利用Intent傳遞它。

Intent  intent=new Intent(MainActivity.this,SecondActivity.class);

Intent.putExtra(“person_data”,person);

startActivity(intent);

獲取方法:

Person person=(Person) getIntent().getSerializableExtra(“person_data”);

    • Parcelable
Public class Person implements Parceblable{

private String name;

private int age;

@Override

public int describeContents(){

return 0;

}

@Override

public void writeToParcel(Parcel dest,int flags){

dest.writeString(name);//寫出name

dest.writeInt(age);//寫出age

}

public static final Parcel.Creator<Person> CREATOR=new Parcelable.Creator<Person>(){

@Override

public Person createFromParcel(Parcel source){

Person person=new Person();

person.name=source.readString();//讀取name

person.age=source.readInt();//讀取age

return person;

}

@Override

public Person[] newArray(int size){

return new Person[size];

}

};

}

從上面的例子裡可以看出Parcelable的具體用法。

傳遞程式碼與Serializable相同。

獲取程式碼修改一下:

Person person =(Person) getIntent().getParcelableExtra(“person_data”);

一般建議使用第二種方法效率較高。