我的编程空间,编程开发者的网络收藏夹
学习永远不晚

AndroidApplication的使用全面解析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

AndroidApplication的使用全面解析

一、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使用解析的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

AndroidApplication的使用全面解析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

AndroidApplication的使用全面解析

这篇文章主要为大家介绍了AndroidApplication的使用全面解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-12-09

使用PHP实现SaaS:全面解析

在当今信息时代,SaaS(Software as a Service)已经成为了企业和个人使用软件的主流方式,它提供了更灵活、更便捷的软件访问方式。通过SaaS,用户无需在本地安装软件,而是通过互联网即可轻松访问和使用各种应用软件。PHP作为一种强大的服务器端编程语言,可以帮助开发人员实现各种SaaS应用程序。接下来,我们将全面解析如何使用PHP实现SaaS
使用PHP实现SaaS:全面解析
2024-03-07

serialVersionUID作用全面解析

serialVersionUID适用于Java的序列化机制。简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相
2023-05-31

全面解析Python的While循环语句的使用方法

Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。其基本形式为:while 判断条件:执行语句……执行语句可以是单个语句或语句块。判断条件可以是任何表达式,任何非零、或非空
2022-06-04

java注解的全面分析

全面解析java注解Java中的常见注解 a.JDK中的注解 @Override 覆盖父类或者父接口的方法 @Deprecated 表示方法已经过时 @SuppressWarnings("deprecation") 忽略方
2023-05-31

全面解析Apache Beam

Apache Beam 主要针对理想并行的数据处理任务,并通过把数据集拆分多个子数据集,让每个子数据集能够被单独处理,从而实现整体数据集的并行化处理。今天小伙伴们一起随编程学习网来探讨一下Apache Beam吧!编程学习网教育
全面解析Apache Beam
2024-04-23

全面解析JavaScript中offsetLeft、offsetTop的用法

本文主要介绍了全面解析JavaScript中offsetLeft、offsetTop的用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-17

Redis02 使用Redis数据库(String类型)全面解析

一 String类型首先使用启动服务器进程 :redis-server.exe 1. Set设置Key对应的值为String 类型的value。例子:向 Redis数据库中插入一条数据类型为String 的记录。在客户端输入命令:C:sof
2022-06-04

阿里云服务器流量使用情况的全面解析

阿里云服务器是阿里巴巴集团提供的云端运算服务,可以为用户提供稳定、高效、灵活的计算和存储资源。对于阿里云服务器的流量使用情况,用户可能会有一些疑问,例如:如何查看阿里云服务器的流量使用情况?如何分析和管理流量使用情况?本文将对此进行详细的解析。一、阿里云服务器流量使用情况的查看阿里云服务器提供了详细的流量使用报告
阿里云服务器流量使用情况的全面解析
2023-10-30

Android4.2系统全面解析

Android 4.2是一个由Google开发的移动操作系统。它是Android操作系统的第四个主要版本,于2012年11月发布。以下是Android 4.2系统的一些重要特性和功能的全面解析:1. 锁屏小部件:Android 4.2引入了
2023-09-25

应用基础框架全面解析

转载本文需注明出处:微信公众号EAWorld,违者必究。引言:应用基础框架Coframe是EOS产品自带的开源应用基础框架,提供了资源管理、权限管理、用户以及角色管理等业务应用基础能力,用户可以根据自己的需要进行二次开发与扩展。本文向大家分
2023-06-05

全面解析Java中的GC与幽灵引用

一般的应用程序不会涉及到 Reference 编程, 但是了解这些知识会对理解 GC 的工作原理以及性能调优有一定帮助,在实现一些基础性设施比如缓存时也可能会用到,希望本文能有所帮助
2022-11-15

使用MSHTML解析HTML页面

要使用MSHTML解析HTML页面,首先需要导入mshtml这个Python模块。```pythonimport mshtml```然后,您可以使用mshtml模块中的`HTMLDocument`类来解析HTML页面。首先,您需要将HTML
2023-09-14

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录