どうやってアプリケーションを使うか教えてあげましょう.記念火影-->影の真似術
4672 ワード
影真似術——シカマルの絶技
奈良一族に密伝された忍术は、自分の影を伸ばして敌と结びつき、自分と同じ动作をさせる奇抜な忍术.
実はアンドロイドにとって、入り口はactivityのOncreateではなく、aplicationでプロファイルを見ることができます.最初はactivityではありません.
実は私が初めてaplicationの使い方を見たとき、なんだか単例モードに似ているような気がしました.あるいは、aplicationは単例の原理を持って彼の特性を作ったのですか.
彼は影の模倣術のように、その中にグローバル変数が保存されていて、誰でも、彼のサブクラスであれば、1つのプロセスであれば、1つの値を共有することができます.
公式解釈:
android.app.ApplicationクラスはActivityと同様にAndroidフレームワークのシステムコンポーネントであり、Androidプログラムが起動するとシステムの情報を格納するためのApplicationオブジェクトが作成されます.Androidシステムは、プログラムの実行時にアプリケーションクラスのオブジェクトを自動的に作成し、1つだけ作成するので、アプリケーションは単一のモデルのクラスと言える.
アプリケーションを起動すると、プロセスIDというPIDが作成され、すべてのActivityがこのプロセスで実行されます.では、アプリケーションの作成時にグローバル変数を初期化し、同じアプリケーションのすべてのActivityがこれらのグローバル変数の値を取得できます.つまり、あるActivityでこれらのグローバル変数の値を変更すると、同じアプリケーションの他のActivityで値が変更されます.Applicationオブジェクトのライフサイクルはプログラム全体で最も長く、そのライフサイクルはこのプログラムのライフサイクルに等しい.グローバルな単一の例であるため、異なるActivityでは、サービスで得られるオブジェクトは同じオブジェクトです.したがって、アプリケーションを使用して、データ転送、データ共有、データキャッシュなどの操作を行うことができます.
さあ、本題を始めましょう.
まずクラス、MyAppクラスを作成し、Applicationを継承します.
ここでgetsetメソッドは、値を変更するために使用されます.
注意するのはmyappクラスを建て終わった後に更にファイルを配置して登録してaplicationの下で1つのname属性をプラスします
2.次に、MainActivityをインスタンス化して出力値を見てみましょう
出力値
11-10 15:38:55.099:I/MainActivity(2475):方式一:xxx
LOG印刷は私たちが成功したことを示しています.
次にbuttonクリックで次のactivity実験に進み値の修正に成功できるかどうか
11-10 15:40:38.447:I/MainActivity(2475):方式一:張泰
成功を見ることができます
次のページをクリックしてみましょう
11-10 15:41:05.307:I/MainActivity(2475):方式一:清兄が成功した
これは、アプリケーション設定の値がグローバルに使用可能であり、変更可能であることを示しており、思考の発散の下でアプリケーションは通常entryクラスまたは地図のlocationを入れることができる.
奈良一族に密伝された忍术は、自分の影を伸ばして敌と结びつき、自分と同じ动作をさせる奇抜な忍术.
実はアンドロイドにとって、入り口はactivityのOncreateではなく、aplicationでプロファイルを見ることができます.最初はactivityではありません.
実は私が初めてaplicationの使い方を見たとき、なんだか単例モードに似ているような気がしました.あるいは、aplicationは単例の原理を持って彼の特性を作ったのですか.
彼は影の模倣術のように、その中にグローバル変数が保存されていて、誰でも、彼のサブクラスであれば、1つのプロセスであれば、1つの値を共有することができます.
公式解釈:
android.app.ApplicationクラスはActivityと同様にAndroidフレームワークのシステムコンポーネントであり、Androidプログラムが起動するとシステムの情報を格納するためのApplicationオブジェクトが作成されます.Androidシステムは、プログラムの実行時にアプリケーションクラスのオブジェクトを自動的に作成し、1つだけ作成するので、アプリケーションは単一のモデルのクラスと言える.
アプリケーションを起動すると、プロセスIDというPIDが作成され、すべてのActivityがこのプロセスで実行されます.では、アプリケーションの作成時にグローバル変数を初期化し、同じアプリケーションのすべてのActivityがこれらのグローバル変数の値を取得できます.つまり、あるActivityでこれらのグローバル変数の値を変更すると、同じアプリケーションの他のActivityで値が変更されます.Applicationオブジェクトのライフサイクルはプログラム全体で最も長く、そのライフサイクルはこのプログラムのライフサイクルに等しい.グローバルな単一の例であるため、異なるActivityでは、サービスで得られるオブジェクトは同じオブジェクトです.したがって、アプリケーションを使用して、データ転送、データ共有、データキャッシュなどの操作を行うことができます.
さあ、本題を始めましょう.
まずクラス、MyAppクラスを作成し、Applicationを継承します.
package com.example.aplicationdemo;
import android.app.Application;
import android.util.Log;
/**
*
*
*
*/
public class MyApp extends Application
{
private static final MyApp instance = new MyApp();
/**
*
*/
private String name = "JDK";
/*
* android 。
* activity,servie,receiver
* */
@Override
public void onCreate()
{
super.onCreate();//
Log.i("CREATE","application created....");
}
/**
* context
* @return MyApp
*/
public static MyApp getApplicationInstance()
{
return instance;
}
/* setter/getter */
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
ここでgetsetメソッドは、値を変更するために使用されます.
注意するのはmyappクラスを建て終わった後に更にファイルを配置して登録してaplicationの下で1つのname属性をプラスします
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:name="com.example.aplicationdemo.MyApp"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
2.次に、MainActivityをインスタンス化して出力値を見てみましょう
package com.example.aplicationdemo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("CREATE","activity created...");
<span style="color:#FF0000;"> MyApp app1 = (MyApp) this.getApplication();
app1.setName("xxx");</span>
Log.i(TAG," :"+app1.getName());
// MyApp app2 = (MyApp) this.getApplicationContext();
// Log.i(TAG," :"+app2.getName());
//
// MyApp app3 = MyApp.getApplicationInstance();// context
// Log.i(TAG," :"+app3.getName());
}
public void btn(View view){
Intent intent=new Intent(MainActivity.this,main2.class);
startActivity(intent);
finish();
}
}
出力値
11-10 15:38:55.099:I/MainActivity(2475):方式一:xxx
LOG印刷は私たちが成功したことを示しています.
次にbuttonクリックで次のactivity実験に進み値の修正に成功できるかどうか
package com.example.aplicationdemo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
public class main2 extends Activity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyApp app1 = (MyApp) this.getApplication();
app1.setName(" ");
Log.i(TAG," :"+app1.getName());
}
public void btn(View view){
Intent intent=new Intent(main2.this,main3.class);
startActivity(intent);
finish();
}
}
11-10 15:40:38.447:I/MainActivity(2475):方式一:張泰
成功を見ることができます
次のページをクリックしてみましょう
11-10 15:41:05.307:I/MainActivity(2475):方式一:清兄が成功した
これは、アプリケーション設定の値がグローバルに使用可能であり、変更可能であることを示しており、思考の発散の下でアプリケーションは通常entryクラスまたは地図のlocationを入れることができる.