1:Application简介
Application类似于Activity和Service,是android框架的一个系统组件,当android程序启动时系统就会创建一个application对象,用来存储一些信息。android应用程序运行时都会创建有且只有一个的Application对象,所以说application也算是单例模式的类,application对象的声明周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期,由于application是全局的单例的,所以在不同的Activity,Service中获取的对象都是同一个对象,正因为如此Application一般用来实现数据传递、数据共享、数据缓存等操作。
2:Android程序的入口
可能很多人都以为Android应用程序的入口是Activity的onCreate()方法,其实不然,每个Android应用程序都包含一个Application实例,一个Application实例有多个Activity、Service、ContentProvider或Broadcast Receiver。因为几乎所有的程序都包含了Activity,所以很多人误解了,实际上Android应用程序的入口是Application中的onCreate()方法。
3:Application类的继承结构:
从Android源码可以看出Application的继承结构为:android.app.Application-->android.content.ContextWrapper-->android.content.Context
4:生命周期:
onCreate():创建应用程序时创建【这也是应用程序真正的入口点】
onTerminate():当终止应用程序对象时调用,不保证一定会被调用,当程序是被内核终止以便为其他应用程序释放资源时,那么将不会调用。
onLowMemory():当后台程序已经终止时调用,好的应用程序一般会在这个方法里面释放一些必不必要的资源来应对当后台已经终止,前台应用程序内存还不够的情况。
onConfigurationChanged():配置改变时触发这个方法。
5:自定义一个Application:
第一步:继承Application,覆盖onCreate()方法,在这个方法里面实例化Application
第二步:在清单文件中进行配置:
<application android:name="com.example.applicationtest.MyApp"> </application>
第三步:使用的时候根据类的名称访问Context即可。
下面通过一个例子来演示Application进行数据传递:
MyApp.java代码:
public class MyApp extends Application { private String uname; public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } /** * 在onCreate方法里面初始化数据 */ public void onCreate() { super.onCreate(); /*初始化全局变量*/ this.setUname("廖泽民"); } public void onTerminate() { } }
MainActivity.java:
public class MainActivity extends Activity { /*定义Application对象*/ private MyApp myApp = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /*获取myApp*/ myApp = (MyApp) this.getApplication(); System.out.println("uname:" + myApp.getUname()); /*设置uname*/ myApp.setUname("习近平"); Intent intent = new Intent(this, SecondActivity.class); startActivity(intent); this.finish(); } }
SecondActivity.java:
public class SecondActivity extends Activity { private MyApp myApp = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.other); myApp = (MyApp) this.getApplication(); System.out.println("uname:" + myApp.getUname()); /*设置全局变量*/ myApp.setUname("李克强"); /*跳转到第三个界面*/ startActivity(new Intent(SecondActivity.this, ThirdActivity.class)); this.finish(); } }
ThirdActivity.java:
public class ThirdActivity extends Activity { private MyApp myApp = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.other1); myApp = (MyApp) this.getApplication(); System.out.println("uanme:" + myApp.getUname()); } }
AndroidManifest.xml:
<!-- 将默认的Application改成自定义的Application即MyApp --> <application android:name="com.example.applicationtest.MyApp" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.applicationtest.MainActivity" 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=".SecondActivity"></activity> <activity android:name=".ThirdActivity"></activity> </application>
程序运行的日志:
以前我们使用Activity进行传值的时候,通常的做法是把数据存储到intent中即使用intent.putExtra();方法存储数据然后再跳转,这个demo告诉我们,可以利用Application进行值得传递。