最近寫的一個apk需要在多個activity之間操作使用同一數據,使用intent 以及broadcast都沒有application來的方便!
Application類是一個基類,生命周期最長,我們可以繼承這個類,重寫一些需要用的方法,創建一些數據,那麼在Application啟動的時候,就會實例化你重寫的這個類!
在這個應用程序中的所有activity都可以通過getApplication()獲取實例,進行操作。
我重寫的一個用來保存全局vector的application,可以在多個activity中對bookdata進行操作!
[java]
public class Mapplication extends Application
{
private static final String TAG = "Mapplication";
private Vector<Book>bookdata=new Vector<Book>();
public void onCreate()
{
super.onCreate();
bookdata.clear();
/*data init*/
Log.d(TAG, "application create");
}
public int getbookcount()
{
return bookdata.size();
}
public Vector <Book> getbookdata()
{
return bookdata;
}
public void setbookdata(Vector<Book> bookdata)
{
this.bookdata.clear();
this.bookdata.addAll(bookdata);
}
public boolean addbook(Book book)
{
String addbookname=book.bookname;
for(int i=0;i<bookdata.size();i++)
{
if(bookdata.get(i).bookname.equals(addbookname))
return false;
}
bookdata.add(book);
return true;
}
在 AndroidManifest.xml中的Application中聲明
android:name=“Mapplication”
[html]
<application
android:name="Mapplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.jscese.moonread.MoonMainActivity"
android:label="@string/app_name"
android:theme="@style/MoonTheme.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
尤為注意的一點:Mapplication.java必須要和主activity在同一個包裡面!也就是你的應用程序的主包下!不然就報錯:
[html]
ActivityThread.handleBindApplication(ActivityThread$AppBindData) line: 4400
在任何一個activity中都可以通過(Mapplication)getApplication()獲取實例對象:
[java]
public void init()
{
mapplication=(Mapplication) getApplication();
bookshelf=mapplication.getbookdata();
if(mapplication.getbookcount()==0)
withoutbook=true;
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.moonmain);
init();
findview();
setlistener();
}
這樣就可以在多個activity中對同一數據進行維護,也可以變相的實現通信。
如果想要進行其它的通信操作,比如更新UI什麼的,可以通過Mapplication實例傳遞主線程activity的handler引用!在另外的activity中通過實例獲取handler引用然後就可以handler.sendMessage(msg);
達到在主線程handler message 更新UI或者其它操作!這樣還是比較方便的。