美文网首页
Android-Application

Android-Application

作者: 哎呦呦胖子斌 | 来源:发表于2018-05-29 09:06 被阅读0次

    有的没的

            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

          本文链接:https://www.haomeiwen.com/subject/wslekftx.html