どうやってアプリケーションを使うか教えてあげましょう.記念火影-->影の真似術


影真似術——シカマルの絶技
奈良一族に密伝された忍术は、自分の影を伸ばして敌と结びつき、自分と同じ动作をさせる奇抜な忍术.
実はアンドロイドにとって、入り口は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を入れることができる.