Android-Application

有的没的

        Application和activity、service、一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个application对象,用来存储系统的一些信息。Android系统会自动为每个程序运行时创建一个Application类的对象且只创建一个,所以说Application是单例模式的一个类。

         通常我们不需要指定一个Application的,系统会自动帮我们创建,如果需要创建自己的Application,只需要创建一个类继承Application并在AndroidMainfest.xml文件中的application标签中进行注册(只需要给application标签增加name属性,并添加自己的Application名字即可)。

         启动Application时,系统会创建一个PID,即进程ID,所有的Activity都会在此进程上运行,那么我们在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,同样,如果某一个Activity中改变了这些全局变量的值,那么在同一个应用中的其他activity中获取到的值也会改变

         这种全局变量方法相对静态类更有保障,直到应用的所有的Activity全部被destory掉才会被释放掉。可以通过Application进行数据传递、数据共享、数据缓存等操作。

Application生命周期

@Override

public void onCreate() {

    //程序创建时执行

    super.onCreate();

    Log.e("infor","onCreate方法");

}

@Override

public void onTrimMemory(int level) {

    //程序在内存清理时执行

    super.onTrimMemory(level);

    Log.e("infor","onTrimMemory方法");

}

@Override

public void onLowMemory() {

    //低内存时执行

    super.onLowMemory();

    Log.e("infor","onLowMemory方法");

}

@Override

public void onTerminate() {

    //程序终止时执行

    super.onTerminate();

    Log.e("infor","onTerminate方法");

}

打开Activity

12-26 10:51:43.382 19766-19766/com.example.xfqlu.activity E/infor: onCreate方法

12-26 10:51:43.383 19766-19766/com.example.xfqlu.activity E/infor: onTrimMemory方法

12-26 10:51:43.435 19766-19766/com.example.xfqlu.activity E/infor: onStart方法

12-26 10:51:43.437 19766-19766/com.example.xfqlu.activity E/infor: onResume方法

12-26 10:51:43.448 19766-19766/com.example.xfqlu.activity E/infor: onTrimMemory方法

HOME键退出应用程序

12-26 10:52:30.072 19766-19766/com.example.xfqlu.activity E/infor: onPause方法

12-26 10:52:30.472 19766-19766/com.example.xfqlu.activity E/infor: onStop方法

12-26 10:52:30.479 19766-19766/com.example.xfqlu.activity E/infor: onTrimMemory方法

重新打开应用程序

12-26 10:54:33.446 22189-22189/com.example.xfqlu.activity E/infor: onRestart方法

12-26 10:54:33.446 22189-22189/com.example.xfqlu.activity E/infor: onStart方法

12-26 10:54:33.447 22189-22189/com.example.xfqlu.activity E/infor: onResume方法

长按MENU键,打开Recent TASK

12-26 10:55:36.051 22189-22189/com.example.xfqlu.activity E/infor: onPause方法

12-26 10:55:36.078 22189-22189/com.example.xfqlu.activity E/infor: onStop方法

12-26 10:55:36.079 22189-22189/com.example.xfqlu.activity E/infor: onTrimMemory方法

彻底关闭应用程序

12-26 10:57:58.111

24771-24771/com.example.xfqlu.activity E/infor: onDestroy方法

Application实现数据共享

1.继承Application

public class TestApplication extends Application{

@Override

    public void onCreate() {

        super.onCreate();

    }

    private int index = 888;

        public int getIndex() {

        return index;

    }

    public void setIndex(int index) {

        this.index = index;

    }

2.在AndroidMainfest.xml文件中配置自定义的Application  

android:name=".TestApplication"

3.在activity中调用并修改,控制台输出index的值为888,将index的值改为999后在另一个activity中调用

private TestApplication app;

private int index;

@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    Log.e("eee","第一个被创建");

    app = (TestApplication) this.getApplication();

    index = app.getIndex();

    Log.e("第一个输出index:", String.valueOf(index));

    app.setIndex(999);

4.在SecondActivity中调用后,控制台输出index的值为修改后的999

private TestApplication app;

private int index;

@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_second);

    app = (TestApplication) this.getApplication();

    Log.e("eee:","跳转到第二个界面");

    index = app.getIndex();

    Log.e("第二个界面的输出:", String.valueOf(index));

Application实现数据传递

        使用Intent和Bundle所能携带的数据类型都是一些基本的数据类型,如果想要实现复杂的数据传递比较麻烦,通常要实现Serializable或者Parcellable接口,这其实是Android的一种IPC数据传递方法,如果两个Activity在同一个进程中就不需要这么麻烦,只要将对象的引用传递过去即可。

         基本思路:在Application中创建一个HashMap,以字符串为Key,Object为value,这样HashMap就可以存储任何类型的对象,在Activity-A中把需要传递的对象放入这个HashMap,然后通过Intent或者其他途径再把这个Key传递给Activity-B,Activity-B就可以根据这个字符串在HashMap中取出这个对象了。

1.在Application中定义HashMap

private HashMap map = new HashMap<>();

public HashMap getMap() {

    return map;

}

public void setMap(HashMap map) {

    this.map = map;

}

2.在Activity-A中将数据通过setMap()传递到Application中

    map.put("first","来自第一个activity的数据");

    map.put("int",555);

    app.setMap(map);

3.在Activity-B中通过getMap()得到HashMap,再通过指定Key值得到指定的value值

String dd = (String) app.getMap().get("first");

int ddd = (int) app.getMap().get("int");

Application实现数据缓存

        当有一个Activity需要从网站上获取一些数据的时候,获取完之后我们就可以把这个数据先存到Application中,当页面跳转到其他Activity再回来的时候,就可以直接使用缓存好的数据了,但如果需要缓存一些大量的数据,最好是缓存一些软引用,并把这些数据缓存到本地Rom或者SDcard上,如果在Application中的缓存不存在,从本地缓存查找,如果本地缓存的数据也不存在,再从网络上获取。

你可能感兴趣的:(Android-Application)