浅谈Android中的Application


Application简介

        相信大家对apk都是非常的熟悉,但是对于application的系统性理解就有一些模糊了。那什么是application呢?它的作用是什么呢?怎样去使用它呢?下面我将为大家来讲解一下。
        通俗的来说,一个apk就是一个application。任何一个Android application基本上都是由一些Activity组成的,并以“.apk”作为后缀名存在于文件系统中。application的基本组成模块有四个:Activity、Service、ContentProvider、Broadcast Receiver。这里就不对Android的四大组件进行详细的说明了。

Application作用

       有经验的程序猿都会有一个习惯,想要知道重写的方法有什么作用,那么就需要去看源码了,下面我们也来对源码来进行分析。
/**
 * Created by xiaoxin on 2016/11/21.
 *
 * Base class for maintaining global application state. You can provide your own
 * implementation by creating a subclass and specifying the fully-qualified name
 * of this subclass as the <code>"android:name"</code> attribute in your
 * AndroidManifest.xml's <code><application></code> tag.
 * The Application
 * class, or your subclass of the Application class, is instantiated before any
 * other class when the process for your application/package is created.

 * 保持全局应用程序状态的基类。你可以提供一个你自己创建的子类,
 * 并在AndroidManifest. xml的 <code><application></code>标签下的<code>"android:name"</code>属性
 * 来指定合法的名称来实现。这个应用程序类或者你的子类的应用程序类,在你的应用程序/包创建之前将被实例化
* Note: There is normally no need to subclass Application. * In most situations, static singletons can provide the same * functionality in a more modular way. * If your singleton needs a global context * (for example to register broadcast receivers), * include{@link android.content.Context#getApplicationContext() Context.getApplicationContext()} * as a {@link android.content.Context} argument when invoking your singleton's * <code>getInstance()</code> method. * 注意:通常不需要子类应用程序。 * 在大多数情况下,静态的单例可以以一个模块化的方式提供相同的功能。 * 如果你的单例需要一个全局上下文(例如注册广播接收器), * 当调用你的单例getinstance()方法时可以引入 Context.getApplicationContext()。 */

      这里我将源码中的注解进行了翻译,其实建议大家可以时常的看一些源码或者未翻译的原版书,对程序的开发理解有很大的帮助。

     接下来我创建了一个MyApplication类,让它继承了Application类,让我们看看它实现的公共方法是什么以及都有什么作用。
public class MyApplication extends Application {
    /**
     *在应用程序创建的时候被调用,可以实现这个这个方法来创建和实例化任何应用程序状态变量或共享资源。
     *还可以在这个方法里面得到 Application 的单例。
     */
    @Override
    public void onCreate() {
        super.onCreate();
    }
    /**
     *当终止应用程序对象时调用,此方法不一定被调用,如果是程序被内核终止来为其他应用程序释放资源,
     *那么将不会有提醒,并且不调用应用程序的对象的onTerminate方法而直接终止进程。
     */
    @Override
    public void onTerminate() {
        super.onTerminate();
    }

    /** 
     * 当设备配置更改时,由系统调用组件运行。请注意,不像Activity,永远不会重新启动和终止。他们必须一直处理变化着的结果,例如通过重新检索的资源。
     * 在这个函数被调用的时候,你的资源对象将被更新并返回资源值来匹配新的配置。
     * @param newConfig
     */
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
    }
    /**
     *当系统资源匮乏的时候,我们可以在这里释放额外的内存, 这个方法一般只会在后台进程已经结束,但前台应用程序还是缺少内存时调用。可以重写这个方法来清空缓存或者释放不必要的资源。
     */
    @Override
    public void onLowMemory() {
        super.onLowMemory();
    }

    /**
     * 当运行中决定当前应用程序应该减少其内存开销时(通常在进入后台运行的时候)调用,包含一个 level 参数,用于提供请求的上下文。
     * @param level
     */
    @Override
    public void onTrimMemory(int level) {
        super.onTrimMemory(level);
    }

}

Application的使用

        相信根据上面跟大家一起对application的学习,已经能够大概知道application是什么以及有什么作用有一定的理解了。那么下面我们就来讲一下在实际开发中application到底该怎么样用。
        首先我们要创建一个自定义类并让它继承Application类。
        然后在清单文件中我们要对application进行设置:
<application
        android:name="com.example.xiaoxin.MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

       最后我们就可以在子类中实现它的方法,一共有五个方法,可以根据自己的需求来进行编写。

Application总结

       我通常对自定义application的应用有三方面:
         一、在自定义类中定义一些数据变量,因为application是全局的,所以全部的activity及其它组件就可以进行数据的共享。
         二、 Intent 和 Bundle 所能携带的数据类型都是一些基本的数据类型,当需要传递一些比较复杂的数据时就比较麻烦了。我们也可以用application来传递数据,首先在自定义类中创建一个HashMap,以字符串为key,Object为value。这样我们的 HashMap 就可以存储任何类型的对象了。然后再通过Intent把key进行传递。在目标类中通过key来取得value,只要再向下转型 ,就实现了对象的传递。
         三、application也可以用来进行缓存。 在自定义类中再创建一个HashMap,当我们从网络获取一些数据,先把这个数据存到Application 当中,
当前跳转到其它页面再返回时,就可以直接使用缓存好的数据了。但如果需要缓存一些比较大的数据时,建议进行一些其它处理,如做软引用处理,把数据缓存到本地等操作。



PS:以后本人会继续写Android进行系统性总结的博客,希望给刚学习的小伙伴从无到有的学习道路中提供学习路线。也是我自己对掌握知识的总结。希望与大家共同进步。

转载请标明出处.,谢谢。



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值