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中的缓存不存在,从本地缓存查找,如果本地缓存的数据也不存在,再从网络上获取。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容