Android——Application全局变量应用

      最近写的一个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;
	}
@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或者其它操作!这样还是比较方便的。







  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值