news 2026/9/3 5:00:47

安卓基础之《(14)—数据存储(4)应用组件Application》

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
安卓基础之《(14)—数据存储(4)应用组件Application》

一、Application的生命周期

1、如果有这样的需求
资源不需要持久化,放到内存里就可以了
希望多个组件都可以访问这个数据
希望它是个可以操作的全局变量

可以使用Application这个组件

2、Application是Android的一大组件,在App运行过程中有且仅有一个Application对象贯穿整个生命周期

3、Application组件方法说明
(1)onCreate:在App启动时调用,可以在这里做准备工作
(2)onTerminate:(只在模拟环境上有效)在App终止时调用,可以在这里做善后的工作
这个接口是给Android系统开发工程师用的,不是Android应用开发工程师用
(3)onConfigurationChanged:在配置改变的时候调用,例如从竖屏变为横屏
屏幕旋转,Activity会重新创建,此时页面上表单填的内容都会消失。可以用ViewModel来解决

4、例子
MyApplication.java

package com.example.chapter06; import android.app.Application; import android.content.res.Configuration; import android.util.Log; import androidx.annotation.NonNull; public class MyApplication extends Application { // 在App启动时调用 @Override public void onCreate() { super.onCreate(); Log.d("sam", "MyApplication onCreate"); } // 在App终止时调用 @Override public void onTerminate() { super.onTerminate(); Log.d("sam", "MyApplication onTerminate"); } // 在配置改变的时候调用,例如从竖屏变为横屏 @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.d("sam", "MyApplication onConfigurationChanged"); } }

MainActivity.java

package com.example.chapter06; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d("sam", "MainActivity onCreate"); } }

AndroidManifest.xml清单文件application标签下添加android:name=".MyApplication"

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"> <application android:name=".MyApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.MyApplication"> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>

5、日志

竖屏变成横屏

二、利用Application操作全局变量

1、Application的数据可以让Activity共享

2、Application在整个应用中只有一个实例,所以在我们自定义的时候,需要使用单例模式来写构造方法
改造MyApplication.java

package com.example.chapter06; import android.app.Application; import android.content.res.Configuration; import android.util.Log; import androidx.annotation.NonNull; import java.util.HashMap; public class MyApplication extends Application { private static MyApplication mApp; // 声明一个公共的信息映射对象,可当做全局变量使用 public HashMap<String, String> infoMap = new HashMap<>(); public static MyApplication getInstance() { return mApp; } // 在App启动时调用 @Override public void onCreate() { super.onCreate(); mApp = this; // 在onCreate初始化实例 Log.d("sam", "MyApplication onCreate"); } // 在App终止时调用 @Override public void onTerminate() { super.onTerminate(); Log.d("sam", "MyApplication onTerminate"); } // 在配置改变的时候调用,例如从竖屏变为横屏 @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.d("sam", "MyApplication onConfigurationChanged"); } }

使用:

MyApplication mApp = MyApplication.getInstance(); mApp.infoMap.put("name", name); mApp.infoMap.put("age", age);

3、适合在Application中保存的全局变量主要有下面3类数据
(1)会频繁读取的信息,如用户名、手机号等
(2)不方便由Intent传递的数据,例如:位图对象、非字符串类型的集合对象等
(3)容易因频繁分配内存而导致内存泄漏的对象,如Handler对象等

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 22:19:35

漏洞扫描工具深度对比:Burp Suite vs. ZAP

一、工具定位与背景核心解析 1.1 Burp Suite&#xff1a;企业级Web安全审计标杆 开发背景&#xff1a;PortSwigger公司推出的商业化渗透测试套件&#xff08;2003年至今&#xff09; 市场定位&#xff1a;专业安全团队的全生命周期Web应用安全解决方案 代表用户&#xff1a;…

作者头像 李华
网站建设 2026/9/2 22:28:28

windows 台式机器开启 WIFI 热点功能

1. 首先需要买一个无线网卡&#xff08;类似如下图&#xff09; 2. 打开 cmd 窗口&#xff08;以管理员运行&#xff09; 3. 创建热点 输入以下命令创建热点&#xff08;替换 热点名称 和 密码&#xff09; netsh wlan set hostednetwork modeallow ssid热点名称 key密码 4. …

作者头像 李华
网站建设 2026/8/29 11:24:10

springboot+vue的时光网电影信息数据可视化分析系统设计与实现_8re776u9

目录系统架构设计核心功能模块技术实现亮点应用价值开发技术核心代码参考示例1.建立用户稀疏矩阵&#xff0c;用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度总结源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统…

作者头像 李华
网站建设 2026/9/2 23:51:35

机器学习中的层次聚类(凝聚型)

摘要&#xff1a;层次聚类&#xff08;凝聚型&#xff09;是一种自底向上的无监督聚类算法&#xff0c;通过逐步合并最近邻簇构建层次结构。该算法首先将每个样本视为独立簇&#xff0c;然后基于距离度量&#xff08;如Ward法、单链接法等&#xff09;迭代合并簇&#xff0c;最…

作者头像 李华