Android学习笔记之——Application

Android学习笔记之——Application

淫慢则不能励精,险躁则无以治性。临近毕业好久没写博客了,这次来探讨下Android开发中Application使用的理解。您宝贵的意见可以让我明白自己的不足之处,并加以改正,在此谢谢各位了!

博客将涉及以下几点:

  1. 什么是Application
  2. 如何使用Application
  3. Application的生命周期以及回调方法
  4. Application的作用

那么直接开始吧:

1、什么是Application

在文档中的定义是:

Application 类是用来维护应用程序全局状态。你可以提供自己的实现,并在 AndroidManifest.xml文件的 <application> 标签中指出他的名字,这将导致在创建应用程序时去实例化你自己的 Application 类。

Android系统会为每个程序运行时创建一个Application类的对象且仅创建一个,所以Application可以说是单例模式的一个类。且 Application 对象的生命周期是整个App中最长的,它的生命周期就等于这个App的生命周期。因为它是全局唯一的,所以在不同的Activity,Service中获得的对象都是同一个对象。所以通过 Application 来进行一些:数据传递、数据共享、数据缓存等操作。

2、如何使用Application

使用Application很简单只需要两步即可:

1、创建子类并继承Application类

2、在AndroidManifest.xml文件中为<application> 标签中指出他的名字android:name

代码如下:

example子类:

public class ExampleApp extends Application {

}

AndroidManifest.xml文件:

 <application
        android:name=".exampleApp"
        >

3、Application的生命周期以及回调方法

在本文的第一点中提过,Application是Android用来维护应用程序全局状态的,所以它的生命周期是整个App中最长的,并且Application有几个重要的回调方法onCreat()、onConfigurationChanged()、onLowMemory()(在Android 4.0后onTrimMemory()所代替),现在我将一一的进行探讨:

首先我们来观察下Application的生命周期,这里我新建了个Activity

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "zbyMainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //打印出Application和Activity的HashCode
        Log.d(TAG, "Application: "+getApplication()+"Activity"+this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy: ");
    }
}

同时在exampleApp的onCreate中也打印出HashCode

public class ExampleApp extends Application {
    private static final String TAG = "zbyExampleApp";
    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "Application: "+this);
    }

来看下运行结果

运行结果

单击返回键结束Activity后从新打开App后:

运行结果

我们发现Activity的HashCode已经变化,而Application的任然是同一个,这说明了Activity的生命周期结束了。Application的生命周期还在继续。

了解了生命周期我们再来看看Application的一些常见回调方法

需要先说明一点:Application的回调方法全部运行在UI线程中(主线程),请不要在这里处理耗时操作。

onCreate我们已经非常熟悉了,就不再赘述。来谈一谈我们陌生的onConfigurationChange和替代了onLowMemory的onTrimMemory。

1、onConfigurationChange

onConfigurationChange会在系统配置发生变更的时候调用,比如更改了屏幕方向或者修改了系统语言等,就会调用这个方法。

2、onTrimMemory

Android4.0之前只能用onLowMemory方法,而从4.0开始,onTrimMemory就替代了onLowMemory方法。
它们的作用是,检测到手机内存不足,为了防止App被杀掉,可以通过该方法来释放一些资源降低内存。

1、该方法中有个参数level,有几个对应的枚举值:

TRIM_MEMORY_RUNNING_MODERATE:程序处于前台正常运行,不会被杀掉,但内存有点低,系统开始kill后台的其他进程。

TRIM_MEMORY_RUNNING_LOW :程序处于前台正常运行,但当前内存非常低,请释放不必要的资源,不然会影响App响应速度。

TRIM_MEMORY_RUNNING_CRITICAL:程序处于前台正常运行,大部分后台进程已经被杀死,请释放不必要的资源

TRIM_MEMORY_UI_HIDDEN:应用从前台切换到后台,回收ui资源

TRIM_MEMORY_BACKGROUND:应用在后台运行,处于LRU缓存列表的最近位置,被回收的优先级比较低,可以释放一些资源,让应用在后台存活更长时间。

TRIM_MEMORY_MODERATE:应用在后台运行,处于LRU缓存列表的中间位置,如果资源得不到释放,有被系统回收的可能。

TRIM_MEMORY_COMPLETE:应用处于后台,处于LRU列表的边缘位置,系统内存严重不足,随时可能被回收,此时尽可能释放掉一切可释放的资源。

上面7个枚举从上到下,越来越容易被系统杀死,回收资源。

 

4、Application的作用

通过上面对生命周期的分析Application的作用显而易见:

1、初始化资源

 App启动时会在Application的onCreate()方法中初始化一些全局资源,系统配置,第三方sdk等。

2、数据共享

由于Application对象是全局唯一的,所以可以用来缓存一些全局变量,这些变量在任何地方都可以调用,达到共享目的。

3、监听App所处状态

通过onConfigurationChange回调方法可以知道当前App处于什么状态

这次所记录的内容就到此为止了,本文写的内容都为基础知识毕竟是笔记篇,很早前就想写些自己对一些内容更深方面的理解并汇总于提高篇的,但这一年发生了好多事情一直没法实现,从上一次写作到这一次间隔了很多时间,希望之后还是能经常来写写博客吧。感谢您的观看,有缘下次再见!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值