2016年10月5日 星期三

Global Variable Or Application Context Variable - Android Example

Ref : http://androidexample.com/Global_Variable_Or_Application_Context_Variable_-_Android_Example/index.php?view=article_discription&aid=114&aaid=136


In this example defining variable in application context and you can use this variable as a Global variable. You can set value in this variable and get value on any activity / broadcast recieiver / service in application context(environment).

In Further examples you will see good use of this way to follow SINGALTON pattern and MVC pattern in android.
The problem is how to save value across several Activities and all parts of your application context. You can achieve this by creating static variable but it is not the good way it influencing towards memory leaks. The way in Android is to associate your variable with the Application context.

Every Application has a context, and Android guarantees that Application context will exist as a instance across your application.

The way to do this is to create a class and extends with android.app.Application, and specify your class in the application tag in your
AndroidManifest.xml file. Android will create an instance of that class and make it available for your entire application context. You can get object of your class on any activity / broadcast reciever / service in application context(environment) by Context.getApplicationContext() method.

Project Structure :




File : src/GlobalClass.java


Create your custom class subclass of android.app.Application class. you will use this class as global class for your Application environment(Conext).
package com.androidexample.globalvariable;
 
import android.app.Application;
 
public class GlobalClass extends Application{
     
    private String name;
    private String email;
     
 
    public String getName() {
         
        return name;
    }
     
    public void setName(String aName) {
        
       name = aName;
         
    }
    
    public String getEmail() {
         
        return email;
    }
     
    public void setEmail(String aEmail) {
        
      email = aEmail;
    }
 
}

File : AndroidManifest.xml


Assign GlobalClass.java in application tag, see this line in application tag  android:name="com.androidexample.globalvariable.GlobalClass" 
After assign you can get GlobalClass.java instance on any activity / broadcast reciever / service in application context.

<?xml version="1.0" encoding="utf-8"?>
    package="com.androidexample.globalvariable"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="9" />
 
    <application
        android:name="com.androidexample.globalvariable.GlobalClass"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.androidexample.globalvariable.FirstScreen"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
             
        </activity>
         
        <activity android:name=".SecondScreen" ></activity
        <activity android:name=".ThirdScreen" ></activity>
    </application>
 
</manifest>

File : src/FirstScreen.java


getApplicationContext() method of Context will give GlobalClass.java instance and set name/email values and maintain state of GlobalClass.java instance.

package com.androidexample.globalvariable;
 
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.app.Activity;
import android.content.Intent;
 
public class FirstScreen extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.firstscreen);
         
        final Button secondBtn = (Button) findViewById(R.id.second);
         
        // Calling Application class (see application tag in AndroidManifest.xml)
        final GlobalClass globalVariable = (GlobalClass) getApplicationContext();
         
        //Set name and email in global/application context
        globalVariable.setName("Android Example context variable");
        globalVariable.setEmail("xxxxxx@aaaa.com");
         
         
        secondBtn.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                 
                Intent i = new Intent(getBaseContext(), SecondScreen.class);
                startActivity(i);
            }
        });
    }  
}

File : src/SecondScreen.java


Call getApplicationContext() method of Context and get GlobalClass.java instance , By GlobalClass.java instance you can get set values for name/email variables.

package com.androidexample.globalvariable;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
 
public class SecondScreen extends Activity {
     
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.secondscreen);
     
        TextView showGlobal     = (TextView) findViewById(R.id.showGlobal);
        final Button thirdBtn = (Button) findViewById(R.id.third);
         
        // Calling Application class (see application tag in AndroidManifest.xml)
        final GlobalClass globalVariable = (GlobalClass) getApplicationContext();
         
        // Get name and email from global/application context
        final String name  = globalVariable.getName();
        final String email = globalVariable.getEmail();
         
        String showString = "
 
Name : "+name+"
"+
                            "Email : "+email+"
 
";
         
        // Show name/email values in TextView
        showGlobal.setText(showString);
         
        thirdBtn.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                 
                Intent i = new Intent(getBaseContext(), ThirdScreen.class);
                startActivity(i);
            }
        });
         
    }
     
    @Override
    protected void onDestroy() {
         
        super.onDestroy();
         
    }
}

File : src/ThirdScreen.java


Call getApplicationContext() method of Context and get GlobalClass.java instance , By GlobalClass.java instance you can get set values for name/email variables.

package com.androidexample.globalvariable;
 
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
 
public class ThirdScreen extends Activity {
     
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.thirdscreen);
     
        TextView showGlobal     = (TextView) findViewById(R.id.showGlobal);
         
        // Calling Application class (see application tag in AndroidManifest.xml)
        final GlobalClass globalVariable = (GlobalClass) getApplicationContext();
         
        // Get name and email from global/application context
        final String name  = globalVariable.getName();
        final String email = globalVariable.getEmail();
         
        String showString = "
 
Name : "+name+"
"+
        "Email : "+email+"
 
";
         
        // Show name/email values in TextView
        showGlobal.setText(showString);
         
    }
}


沒有留言:

張貼留言