有時候我們需要在Activity之外的類中修改Activity中的資料或是UI, 或者是要在自訂的類中要修改其它類中的值。這時候就變的很麻煩!這時候我們就需要一個全域的容器,來存放要共用的資料,就像J2EE中的Session。 當然,Android設計者肯定也考慮到了這一點。進入正題-----> Application(註: 本節只簡單介紹一下使用方法,相信天才的碼農們舉一反三)
使用方法:
第一、實現自己的Applicaiton
public class ApplicationContext extends Application { public static final int FLUSH_MAIN_ACTIVITY=1; private Handler main; public void setMainHandler(Handler handler){ main=handler; } public void flushMain(){ main.sendEmptyMessage(FLUSH_MAIN_ACTIVITY); } }
第二、在Activity中定義Handler ,並註冊Handler
package com.sequel.text;import android.app.Activity;import android.app.Application;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Message;public class MainActivity extends Activity {private int count = 0;/** Called when the activity is first created. *///定義Handler, Handler flushHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case ApplicationContext.FLUSH_MAIN_ACTIVITY://在這可進行想要的操作operat();break;default:break;}super.handleMessage(msg);}};private ApplicationContext appC;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);appC = (ApplicationContext) getApplication();//註冊HandlerappC.setMainHandler(flushHandler);try {Thread.sleep(2000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}startActivity(new Intent(MainActivity.this,SecondActivity.class));//啟動另一個Activity}public void operat(){//.....System.out.println(count++);}}
第三、調用方法----在SecondActivity中進行操作
import android.app.Activity;import android.app.Application;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class SecondActivity extends Activity {/** Called when the activity is first created.*/private ApplicationContext appC;private Button button;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.second);button = (Button) findViewById(R.id.requestButton);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//這就是調用方法appC.flushMain();}});appC = (ApplicationContext) getApplication();}}
第四、千萬不要以為這就完事大吉了! 一定要在AndroidManifest.xml中註冊你自己定義的Application
<application android:icon="@drawable/icon" android:label="@string/app_name" android:name=".ApplicationContext">