Android-Applicationグローバル変数アプリケーション
3022 ワード
最近書いたapkは複数のactivity間で同じデータを操作する必要があります.intentもbroadcastもアプリケーションがないので便利です.
Applicationクラスは1つのベースクラスで、ライフサイクルが最も長くて、私たちはこのクラスを継承することができて、いくつかの必要な方法を書き直して、いくつかのデータを作成して、それではApplicationが起動する時、あなたが書き直したこのクラスをインスタンス化します!
このアプリケーションのすべてのactivityはgetApplication()でインスタンスを取得し、操作できます.
私が書き直したグローバルvectorを保存するためのアプリケーションは、複数のactivityでbookdataを操作することができます!
AndroidManifest.xmlのアプリケーションで宣言
android:name=“Mapplication”
特に注意したいのは、Mapplication.javaはメインactivityと同じパッケージに入れなければなりません!つまりあなたのアプリケーションのメインパッケージです!さもないと間違いを報告します.
いずれのactivityでも、(Mapplication)getApplication()を使用してインスタンスオブジェクトを取得できます.
これにより、複数のactivityで同一データをメンテナンスしたり、位相を変えて通信を実現したりすることができる.
UIの更新など、他の通信操作を行う場合は、マスタースレッドactivityのhandlerリファレンスをMapplicationインスタンスで渡すことができます.他のactivityでは、handler参照をインスタンスで取得し、handler.sendMessage(msg)を取得できます.
メインスレッドhandler messageでUIまたはその他の操作を更新します.これはやはり便利です.
Applicationクラスは1つのベースクラスで、ライフサイクルが最も長くて、私たちはこのクラスを継承することができて、いくつかの必要な方法を書き直して、いくつかのデータを作成して、それではApplicationが起動する時、あなたが書き直したこのクラスをインスタンス化します!
このアプリケーションのすべてのactivityはgetApplication()でインスタンスを取得し、操作できます.
私が書き直したグローバルvectorを保存するためのアプリケーションは、複数の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のアプリケーションで宣言
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の更新など、他の通信操作を行う場合は、マスタースレッドactivityのhandlerリファレンスをMapplicationインスタンスで渡すことができます.他のactivityでは、handler参照をインスタンスで取得し、handler.sendMessage(msg)を取得できます.
メインスレッドhandler messageでUIまたはその他の操作を更新します.これはやはり便利です.