在 如何讓很多activity共用一個物件 獨體模式(Singleton Pattern) 當中, 我們談到怎麼讓很多個Activity共同存取同一個物件, 其實還有另外一個方法, 那就是利用Application。
其實, Android最初起始的類別就是Application類別, 從AndroidManifest.xml就可以看出端倪。
我們先宣告一個Person的類別, 這個用來讓Application存取, 以便達到物件共用的目的。
然後我們建立一個Application的子類別。
並且在AndroidManifest.xml內設定為Application。
接著分別建立兩個類別, 一個是MainActivity類別, 另外一個是NextActivity,
首先由MainActivity類別來設定Person物件, 然後由NextActivity來讀取, 看是否值相同,
如果值相同就代表取到相同物件。
MainActivity設定好姓名跟年紀以後, 轉跳到NextActivity類別。
NextActivity將物件取出來, 並且讀取姓名跟類別。
看到結果真的是同一個物件。
這次的範例雖然是利用Application類別幫忙傳遞物件, 但是其實並不推薦這種方式, 只是提供一種做法而已, 參考看看。
程式碼
http://uploadingit.com/file/qeo0odq0xipfgu7g/ApplicationDemo.zip
其實, Android最初起始的類別就是Application類別, 從AndroidManifest.xml就可以看出端倪。
我們先宣告一個Person的類別, 這個用來讓Application存取, 以便達到物件共用的目的。
public class Person {
private String name;
private int age;
public Person(){
name = "baby";
age = 0;
}
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
}
由這個類別可以看到我們可以設定名字跟年紀, 如果沒有設定就是baby, 0歲。然後我們建立一個Application的子類別。
public class MyApp extends Application {
private Person p;
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
p = new Person();
}
public Person getPerson(){
return p;
}
}
在這個類別宣告一個Person物件, 並且初始化它, 接著建立一個方法可以取得它。並且在AndroidManifest.xml內設定為Application。
<application
android:name="com.example.applicationdemo.MyApp"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
接著分別建立兩個類別, 一個是MainActivity類別, 另外一個是NextActivity,
首先由MainActivity類別來設定Person物件, 然後由NextActivity來讀取, 看是否值相同,
如果值相同就代表取到相同物件。
MainActivity設定好姓名跟年紀以後, 轉跳到NextActivity類別。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyApp m = (MyApp)getApplication();
Person myPerson = m.getPerson();
myPerson.setName("givemepass");
myPerson.setAge(18);
startActivity(new Intent().setClass(MainActivity.this, NextActivity.class));
}
NextActivity將物件取出來, 並且讀取姓名跟類別。
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
MyApp m = (MyApp)getApplication();
Person p = m.getPerson();
Log.e("NextActivity givemepass",p.getName());
Log.e("NextActivity givemepass",Integer.toString(p.getAge()));
}
看到結果真的是同一個物件。
這次的範例雖然是利用Application類別幫忙傳遞物件, 但是其實並不推薦這種方式, 只是提供一種做法而已, 參考看看。
程式碼
http://uploadingit.com/file/qeo0odq0xipfgu7g/ApplicationDemo.zip