返回顶部
首页 > 资讯 > 移动开发 >AndroidApplication的使用全面解析
  • 754
分享到

AndroidApplication的使用全面解析

AndroidApplication使用解析AndroidApplication 2022-12-09 15:12:33 754人浏览 泡泡鱼
摘要

目录一、Application是什么?二、Application类的方法1、onCreate()方法2、onConfigurationChanged(Configuration ne

一、Application是什么?

Application类在每一次开发当中是我们都会遇到的,每一个APP都会有一个Application实例,它拥有和APP一样长的生命周期,Application和APP一起“同生共死”;

我们今天就来讲解下,加强下基础和内功,让自己更有自信;

  • Android系统会为每一个程序运行时创建一个Application类的对象且仅创建一个,所以Application能够说是单例 (singleton)模式的一个类;
  • application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。由于它是全局的单例的。所以在不同的Activity,Service中获得的对象都是同一个对象;
  • Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个 Application对象,用来存储系统的一些信息;
  • 通常我们是不需要指定一个Application的,系统会自动帮我们创建,如果需要创建自己的Application,那也很简单,创建一个类继承Application并在AndroidManifest.xml文件中的application标签中进行注册;
  • 启动Application时,系统会创建一个PID,即进程ID,所有的Activity都会在此进程上运行;
  • Application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期,因为它是全局的单例的,所以在不同的Activity,Service中获得的对象都是同一个对象,所以可以通过Application来进行一些,如:数据传递、数据共享和数据缓存等操作;

二、Application类的方法

1、onCreate()方法

继承自 ContextWarpper 类

public class Application extends ContextWrapper implements ComponentCallbacks2 {
...
...
}
 public void onCreate() {
 }
  • 在Application创建的时候调用,一般用于初始化一些东西,如全局的对象,环境的配置;
  • 设置全局共享数据,如全局共享变量、方法等;

注意:

共享数据只在应用程序的生命周期内有效,当该应用程序被杀死,这些数据也会被清空,所以只能存储一些具备 临时性的共享数据

请不要执行耗时操作,否则会拖慢应用程序启动速度;

2、onConfigurationChanged(Configuration newConfig)

重写此方法可以监听APP一些配置信息的改变事件(如屏幕旋转等);

当配置信息改变的时候会调用这个方法;

registerComponentCallbacks(new ComponentCallbacks2() {
            @Override
            public void onConfigurationChanged(Configuration newConfig) {
              ...
            }
        });

3、onLowMemory()方法

  • 重写此方法可以监听Android系统整体内存较低时候的事件;
  • 调用时刻:Android系统整体内存较低时;
registerComponentCallbacks(new ComponentCallbacks2() {
  @Override
            public void onLowMemory() {
            }
        });

4、onTerminate()方法

  • 通知 应用程序 当前内存使用情况(以内存级别进行识别)
  • 根据当前内存使用情况进行自身的内存资源的不同程度释放,以避免被系统直接杀掉 & 优化应用程序的性能体验;
  • 系统在内存不足时会按照LRU Cache中从低到高杀死进程;优先杀死占用内存较高的应用;
registerComponentCallbacks(new ComponentCallbacks2() {
@Override
  public void onTrimMemory(int level) {
  // Android系统会根据当前内存使用的情况,传入对应的级别
  // 下面以清除缓存为例子介绍
    super.onTrimMemory(level);
  .   if (level >= ComponentCallbacks2.TRIM_MEMORY_MODERATE) {
        mPendingRequests.clear();
        mBitmapHolderCache.evictAll();
        mBitmapCache.evictAll();
    }
        });

5、registerActivityLifecycleCallbacks()和unregisterActivityLifecycleCallbacks()

这两个方法用于注册或者注销对APP内所有Activity的生命周期监听;

当APP内Activity的生命周期发生变化的时候就会调用ActivityLifecycleCallbacks里面的方法:

registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                Log.e(TAG,"onActivityCreated: " + activity.getLocalClassName());
            }
            @Override
            public void onActivityStarted(Activity activity) {
                Log.e(TAG,"onActivityStarted: " + activity.getLocalClassName());
            }
            @Override
            public void onActivityResumed(Activity activity) {
                Log.e(TAG,"onActivityResumed: " + activity.getLocalClassName());
            }
            @Override
            public void onActivityPaused(Activity activity) {
                Log.e(TAG,"onActivityPaused: " + activity.getLocalClassName());
            }
            @Override
            public void onActivityStopped(Activity activity) {
                Log.e(TAG, "onActivityStopped: " + activity.getLocalClassName());
            }
            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
            }
            @Override
            public void onActivityDestroyed(Activity activity) {
                Log.e(TAG,"onActivityDestroyed: " + activity.getLocalClassName());
            }
        });

查看log打印的情况如下:

onActivityPaused: MainActivity

onActivityStopped: MainActivity

onActivityStarted: MainActivity

onActivityResumed: MainActivity

6、registerComponentCallbacks()和unregisterComponentCallbacks()方法

注册和注销 ComponentCallbacks2回调接口

 registerComponentCallbacks(new ComponentCallbacks2() {
            @Override
            public void onTrimMemory(int level) {
            }
            @Override
            public void onConfigurationChanged(Configuration newConfig) {
            }
            @Override
            public void onLowMemory() {
            }
        });

三、应用场景和自定义

1、应用场景

  • 初始化应用程序级别的资源,如全局对象;
  • 数据共享、数据缓存;
  • 获取应用程序当前的内存使用情况,及时释放资源,从而避免被系统杀死;
  • 监听应用程序配置信息的改变,如屏幕旋转等;
  • 监听应用程序内,所有Activity的生命周期;

2、自定义Application

(1)继承Application

public class MyApplication extends Application{
   
    private String value;
    @Override
    public void onCreate() {
        super.onCreate();
        // 初始化全局变量
        setValue(VALUE); 
    }
    public void setValue(String value){
        this.value = value;
    }
    public String getValue(){
        return value;
    }
}

注意:继承Application类,主要重写里面的onCreate()方法(android.app.Application包的onCreate()才是真正的Android程序的入口点),就是创建的时候,初始化变量的值。然后在整个应用中的各个文件中就可以对该变量进行操作了;

(2)在ApplicationManifest.xml文件中配置自定义的Application

<application
       android:name="MyApplication">
</application>

(3)使用自定义的Application类实例

private MyApplication app;
// 只需要调用Activity.getApplication() 或Context.getApplicationContext()就可以获得一个Application对象
app = (MyApplication) getApplication();
// 然后再得到相应的成员变量 或方法 即可
app.getValue();

总结

每个Android App运行时,会首先自动创建Application 类并实例化 Application 对象,且只有一个即 Application类 是单例模式(singleton)类;

即不同的组件(如Activity、Service)都可获得Application对象且都是同一个对象;

Application 对象的生命周期是整个程序中最长的,即等于Android App的生命周期;

以上就是Android Application的使用全面解析的详细内容,更多关于Android Application使用解析的资料请关注编程网其它相关文章!

--结束END--

本文标题: AndroidApplication的使用全面解析

本文链接: https://lsjlt.com/news/174692.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • AndroidApplication的使用全面解析
    目录一、Application是什么?二、Application类的方法1、onCreate()方法2、onConfigurationChanged(Configuration ne...
    99+
    2022-12-09
    Android Application使用解析 Android Application
  • vue$attrs的使用全面解析
    目录$attrs的使用vue以下是$attrs的使用示例1.父组件(Father.vue)2.儿子组件(Child.vue)3.孙子组件(GrandChild.vue)$attrs到...
    99+
    2024-04-02
  • 使用PHP实现SaaS:全面解析
    在当今信息时代,SaaS(Software as a Service)已经成为了企业和个人使用软件的主流方式,它提供了更灵活、更便捷的软件访问方式。通过SaaS,用户无需在本地安装软件,而是通过互联网即可轻松访问和使用各种应用软件。PHP作...
    99+
    2024-03-07
    saas php 实现 用户注册 php脚本
  • 使用SpringExpressionLanguage(SpEL)全面解析表达式
    目录Spring Expression Language (SpEL)1.环境准备2.SpEL示例应用3.小结Spring表达式语言SpELSpEL:字面量SpEL:引用 Bean、...
    99+
    2024-04-02
  • serialVersionUID作用全面解析
    serialVersionUID适用于Java的序列化机制。简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相...
    99+
    2023-05-31
    serialversionuid 作用
  • 全面解析Python的While循环语句的使用方法
    Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。其基本形式为: while 判断条件: 执行语句…… 执行语句可以是单个语...
    99+
    2022-06-04
    使用方法 语句 Python
  • java注解的全面分析
    全面解析java注解Java中的常见注解 a.JDK中的注解    @Override 覆盖父类或者父接口的方法    @Deprecated 表示方法已经过时 &nbs...
    99+
    2023-05-31
    java 注解 ava
  • 全面解析JavaScript中offsetLeft、offsetTop的用法
    目录一、第一个小例子二、第二个小例子(给box1添加相对定位)三、第三个小例子(给box1,box2添加相对定位)四、解析五、扩展(在第三个例子中,假如我想获取到box3到浏览器窗口...
    99+
    2023-05-17
    JavaScript offsetLeft offsetTop
  • Redis02 使用Redis数据库(String类型)全面解析
    一 String类型 首先使用启动服务器进程 : redis-server.exe 1. Set   设置Key对应的值为String 类型的value。   例子:向 Redis数据库中插入一条数...
    99+
    2022-06-04
    类型 数据库 Redis
  • SpringBoot之webflux全面解析
    目录webflux介绍webflux应用场景Spring Boot 2.0 WebFlux响应式编程Spring Webfluxspring webflux和spring mvc的异...
    99+
    2024-04-02
  • Android4.2系统全面解析
    Android 4.2是一个由Google开发的移动操作系统。它是Android操作系统的第四个主要版本,于2012年11月发布。以...
    99+
    2023-09-25
    Android
  • 全面解析JavaScript中null
    目录1.null 的概念1.1 null 的一个比较贴切的比喻2. 如何去检测 null2.1 null 是一个假值2.2 typeof null3. null 的陷阱4. null...
    99+
    2024-04-02
  • 应用基础框架全面解析
    转载本文需注明出处:微信公众号EAWorld,违者必究。引言:应用基础框架Coframe是EOS产品自带的开源应用基础框架,提供了资源管理、权限管理、用户以及角色管理等业务应用基础能力,用户可以根据自己的需要进行二次开发与扩展。本文向大家分...
    99+
    2023-06-05
  • 阿里云服务器流量使用情况的全面解析
    阿里云服务器是阿里巴巴集团提供的云端运算服务,可以为用户提供稳定、高效、灵活的计算和存储资源。对于阿里云服务器的流量使用情况,用户可能会有一些疑问,例如:如何查看阿里云服务器的流量使用情况?如何分析和管理流量使用情况?本文将对此进行详细的解...
    99+
    2023-10-30
    阿里 流量 情况
  • 全面分析Java方法的使用与递归
    目录java中方法的使用什么是方法方法的定义与使用方法如何进行调用及其方法调用过程方法的形参和实参方法重载方法签名递归java中方法的使用 什么是方法 举一个日常生活中的例子,比如我...
    99+
    2024-04-02
  • 全面解析Java中的GC与幽灵引用
    Java 中一共有 4 种类型的引用 : StrongReference、 SoftReference、 WeakReference 以及 PhantomReference (传说中...
    99+
    2022-11-15
    Java GC
  • Java多态的全面系统解析
    目录Java基础知识(多态)多态多态的定义和存在的必要条件多态的定义:多态存在的三个必要条件多态的案例多态的好处多态的弊端引用类型转换1. 引用类型转换是什么,为什么需要它?2. 向...
    99+
    2024-04-02
  • 关于C#线程的全面解析
    目录线程的作用和意义线程生命周期C#创建线程C#让线程休眠一会C#销毁线程C#线程优先级lock:给线程加锁,保证线程同步Monitor:锁定资源Mutex:互斥锁线程的作用和意义 ...
    99+
    2024-04-02
  • Java全面细致讲解Wrapper的使用
    目录一、概述二、作用三、使用1. 基本数据类型-包装类的实例(装箱)2. 包装类-基本数据类型(拆箱)3. String-基本数据类型/包装类4. 基本数据类型/包装类-String...
    99+
    2024-04-02
  • Java全面细致讲解final的使用
    目录一、理解二、作用1. 修饰-类2. 修饰-方法3. 修饰-变量3.1 修饰-成员变量(属性)3.2 修饰-局部变量三、经典题目一、理解 final:最终的 二、作用 final ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作