Android Application详解和使用

能爬上金字塔顶峰的只有两种动物,雄鹰和蜗牛,我既然做不了雄鹰,就做一只蜗牛吧。

研究一个新的东西,从哪几方面开始,我觉得可以从这几方面:

  1. 它是什么,有什么属性
  2. 它能干什么
  3. 怎么方便高效的使用它

好了,一步步来研究,要有足够的耐心和毅力,不怕出错,就怕停滞不前。

一、Application是什么

用于保存全局应用状态的基础类,可以提供自己的实现,自定义实现必须继承Application类,并且在AndroidManifest.xml中的application标签的name属性中设置你的实现类,Application是全局单例,一个客户端应用从开始到结束只有一个实例。

方法:
  • onConfigurationChanged(Configuration newConfig)

Called by the system when the device configuration changes while your component is running.

当应用程序运行中,系统配置发生改变时,系统回调用此方法

  • onCreate()

    Called when the application is starting, before any activity, service, or receiver objects (excluding content providers) have been created.

当应用程序启动,在任何activity、service、receiver对象被创建之前创建之前被调用。

  • onLowMemory()

    This is called when the overall system is running low on memory, and actively running processes should trim their memory usage.

当整个Android系统处于低内存运行时调用,并且活跃的进程会释放他们的内存

  • onTerminate()

    This method is for use in emulated process environments.

这个方法被用来模拟进程环境,真机上时不会调用此方法的。

  • onTrimMemory(int level)

    Called when the operating system has determined that it is a good time for a process to trim unneeded memory from its process.

当Android系统在恰当的时候削减一个进程的内存时被调用

  • registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback)

注册activity生命周期回调的方法

  • registerComponentCallbacks(ComponentCallbacks callback)

    Add a new ComponentCallbacks to the base application of the Context, which will be called at the same times as the ComponentCallbacks methods of activities and other components are called.

注册组件的回调方法

  • registerOnProvideAssistDataListener(Application.OnProvideAssistDataListener callback)
  • unregisterActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback)
  • unregisterComponentCallbacks(ComponentCallbacks callback)
  • unregisterOnProvideAssistDataListener(Application.OnProvideAssistDataListener callback)

二、Application能干什么

如果你的应用程序没有写自定义的Application,当应用启动的时候,也会创建一个默认的Application,Application的创建,其目的用于保存全局应用状态的信息,而且是单例模式,生命周期贯穿整个应用的运行。基于这一点,我们可以利用它的全局单例,保存一些系统运行时的状态信息,和数据操作的动作。搜罗网上的方法和结合自己的使用,总结如下:

  1. 用户登录信息保存
  2. Activity之前数据的传递,在Application中维护一个Map
解析:
  1. 对于第一点,使用Application保存数据,是一个普遍的做法,这种方式方便快捷,便于管理,而且充分运用了Application的全局单例的特性。
  2. 在Application中维护一个Map来实现Intent传递数据,好处是可以传一些Intent不支持的数据类型,比如Bitmap、类(未实现Serializable接口的类)类型。
但是,这里有一个大大的但是,以上会出现下面的问题。
  1. 当应用程序因为内存吃紧,在后台关掉App后,用户再一次打开App时,Android会重新创建一个之前被Kill掉的Application实例并恢复上次用户打开的Activity,这时的Application是全新的,之前存储的所有数据都为空,所以如果继续从Application中取值,会因取不到值出错而崩掉。
  2. 在Application中维护Map和List存储数据和管理Activity的引用,这样带来的坏处是如果内容不被使用了,这些对象不能被回收,因为这里维护的都是强引用,长此以往,会导致内存不断升高。
解决办法:
  1. 通过Intent在Activity之间来传递数据(但是请别传递大量数据,这有可能导致程序异常或者ANR)
  2. 使用官方推荐的方法中的一种将数据持久化,存储在磁盘中;
  3. 在使用数据和句柄的时候做空值检测;
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值