Android——Application全局变量应用

来源:互联网 发布:淘宝发货地不一样 编辑:程序博客网 时间:2024/06/05 16:52

      最近写的一个apk需要在多个activity之间操作使用同一数据,使用intent 以及broadcast都没有application来的方便!

Application类是一个基类,生命周期最长,我们可以继承这个类,重写一些需要用的方法,创建一些数据,那么在Application启动的时候,就会实例化你重写的这个类!

在这个应用程序中的所有activity都可以通过getApplication()获取实例,进行操作。

我重写的一个用来保存全局vector的application,可以在多个activity中对bookdata进行操作!

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”

  <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在同一个包里面!也就是你的应用程序的主包下!不然就报错:

ActivityThread.handleBindApplication(ActivityThread$AppBindData) line: 4400


在任何一个activity中都可以通过(Mapplication)getApplication()获取实例对象:

public void init(){mapplication=(Mapplication) getApplication();bookshelf=mapplication.getbookdata();if(mapplication.getbookcount()==0)withoutbook=true;}@Overrideprotected 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或者其它操作!这样还是比较方便的。







原创粉丝点击