·Jormungand
我会把这个不完美的故事 变成我所期望的样子
展开
-
Android |双锁单例模式中使用Context如何避免内存泄露的 Warning 提示
在Android开发中,经常会将工具类以单例模式的方法实现,而工具类中又总不可避免的用到。查阅了大量资料后,解决方法如文中所示。值得注意的是,在我查阅的所有资料中,基本所有解决方法有内存泄漏的风险。包括 Google 自己的。原创 2022-09-21 15:18:57 · 1445 阅读 · 0 评论 -
Android入门(17)| 百度提供的 Android定位SDK
版本起,全新升级了全球定位能力,在海外地区定位所获得的经纬度,原创 2022-07-15 18:24:59 · 839 阅读 · 0 评论 -
Android | 再探 RecyclerView 之名词解析
文章目录Adapter、ViewHolderPositionlayout position 和 adapter position浏览本文前推荐先阅读 Android入门(九)| 滚动控件 ListView 与 RecyclerViewAdapter、ViewHolderAdapter: A subclass of RecyclerView.Adapter responsible for providing views that represent items in a data set.翻原创 2022-07-06 11:08:54 · 609 阅读 · 0 评论 -
Android | Sensor.TYPE_ORIENTATION被废弃后的解决办法
文章目录概述getOrientation 方法根据 旋转矩阵R 获取 设备旋转弧度getRotationMatrix 方法根据 地磁场、加速度传感器对象 获取 旋转矩阵R代码参考资料概述Sensor.TYPE_ORIENTATION 常数在 API 8 中已弃用,官方推荐使用 SensorManager.getOrientation() 替代。关于 Orientation Sensor(被弃用的方向传感器) 在官方文档中的概述里有这样一句话:The orientation sensor is原创 2022-05-11 23:41:50 · 2881 阅读 · 0 评论 -
Android入门(16)| 服务
文章目录概念Android 多线程继承 Thread继承 Runable 接口匿名类异步消息处理AsyncTask概念服务(Service)用于执行无需和用户交互但需要长期运行的任务,其不是独立进程,而是依赖于创建服务时所在的应用程序进程。应用程序进程死亡时,所有依赖于该进程的服务也都将停止运行。Android 多线程服务不会自动开启线程,因此为了防止主线程被阻塞,应该在服务内部手动创建子线程。通常有三种线程的使用方式:继承 Thread新建一个类继承 Thread ,然后重写 run()原创 2022-03-14 20:42:12 · 3445 阅读 · 1 评论 -
Android入门(15)| 网络
文章目录WebViewHTTP使用HttpURLConnectionWebViewWebView 可以在**应用程序中(而不是浏览器)**展示一些网页。布局文件 web_layout.xml:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_pa原创 2022-03-08 16:12:13 · 2890 阅读 · 0 评论 -
Android开发(4) | 系统权限、MediaPlayer类 和 VideoView类 的应用——播放多媒体文件
文章目录MediaPlayer类播放音频的实例MediaPlayer类对多种格式的音频文件提供了全面的控制方法:如何获得MediaPlayer实例?通过构造函数:MediaPlayer mp = new MediaPlayer();调用 MediaPlayer.create() 方法:MediaPlayer mp = MediaPlayer.create(this, R.raw.test);由于 create 方法内会调用 setDataSource 和 prepare,原创 2022-03-06 18:30:42 · 2595 阅读 · 0 评论 -
Android开发(3) | 权限和内容提供器的应用——调用相机和相册
文章目录布局文件 notice_layout.xml:活动代码: public static final int TAKE_PHOTO = 1; private ImageView picture; private Uri imageUri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState)原创 2022-03-05 12:33:19 · 1794 阅读 · 0 评论 -
Android入门(14)| 通知
文章目录创建通知点击效果实例创建通知创建通知的步骤:管理通知的 NotificationManager,通常通过当前 Context 的 getSystemService() 获取实例。它接受一个字符串参数用于确定获取系统的什么服务。Android 8.0(O) 版本后需要通知通道(通知类别) Notificationchannel 以细致化管理通知。使用 Builder构造器 来创建 Notification对象。可以使用 support库 提供的 NotificationCompat类 中原创 2022-03-04 17:29:03 · 3240 阅读 · 0 评论 -
Android入门(13)| Android权限 与 内容提供器
文章目录普通权限与危险权限运行时申请权限内容提供器普通权限与危险权限主要用于不同应用程序之间在保证被访数据的安全性的基础上,实现数据共享的功能。在 Android 6.0 开始引入了运行时权限的功能,用户在安装软件时不需要一次性授权所有的权限,而是在软件的使用过程中再对某一项权限进行申请。Android 将权限分为两类:普通权限: 不会直接影响到用户的安全和隐私的权限,对于这部分权限,系统自动授权。危险权限: 可能会涉及到用户的隐私或者对设备安全性造成影响的权限。危险权限如下,这些权限需要原创 2022-03-03 13:41:13 · 644 阅读 · 0 评论 -
Android入门(12)| 数据持久化
文章目录数据持久化文件存储将数据存储进文件实例从文件中读取数据实例SharedPreferences存储数据持久化保存在内存中的数据是属于瞬时状态的,而保存在存储设备中的数据上处于持久状态的,持久化技术提供了一种可以让数据在瞬时状态和持久状态之间转换的机制。Android系统中主要提供了3种常用方式用于简单地实现数据持久化功能,即文件存储、SharedPreference存储以及数据库存储。文件存储将数据存储进文件Context类 中提供了一个 openFileOutput 方法,用于将数据原创 2022-03-01 15:03:51 · 1636 阅读 · 0 评论 -
Android开发(2) | 广播 Broadcast 的应用——强制下线功能
文章目录功能简介关闭所有活动登陆界面发送强制下线的广播功能简介强制下线功能只需要弹出一个对话框,让用户只能点击确定按钮,回到登录界面。如果在每一个活动中添加一个对话框的话太过繁琐,用广播实现是一个好办法。关闭所有活动强制下线功能需要先关闭所有的活动,我们只需要用 AcitivityCollector 类来管理所有的活动,然后用 BaseActivity 类作为所有活动的父类,如此一来即可通过 ActivityCollector.finishAll() 退出所有程序。AcitivityCollec原创 2022-02-24 16:46:31 · 1057 阅读 · 0 评论 -
Android入门(11)| 全局广播与本地广播
文章目录广播概念接收广播动态注册实例静态注册实例发送广播发送标准广播广播概念Android 中的每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就只会接收到自己所关心的广播内容,这些广播可能是来自系统的,也可能是来自于其他应用程序的。广播有两种类型——有序广播和标准广播:标准广播: 一种完全异步执行的广播,在广播发出去之后,所有的广播接收器几乎都会同一时刻接收到这条广播消息,没有任何的先后顺序可言,这种广播的效率比较高,但是无法被截断。有序广播: 是一种同步执行的广播,在广播发出原创 2022-02-23 15:41:08 · 2470 阅读 · 2 评论 -
Android开发(1) | Fragment 的应用——新闻应用
文章目录news_item.xml:<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/news_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:lines="1" android:ellipsize="原创 2022-02-21 19:12:23 · 6397 阅读 · 0 评论 -
Android入门(10)| Fragment碎片详解
文章目录为什么要使用碎片(Fragment)实例布局文件Fragment为什么要使用碎片(Fragment)我们在手机上看新闻可能是这样的:RecyclerView 显示了一组新闻标题点击一个新闻后会跳转到新界面显示详细内容但当设备屏幕很大时,我们完全可以将 RecyclerView 和 详细内容 分别放在两个 碎片 中,然后引入同一个 活动:Fragment 的定义为小活动,同样具有生命周期,但比一个 Activity 更细化的管理空间。实例布局文件定义两个布局文件:lef原创 2022-02-18 20:28:10 · 1404 阅读 · 0 评论 -
Android入门(九)| 滚动控件 ListView 与 RecyclerView
文章目录ListViewListView由于手机屏幕空间有限,能够一次性在屏幕上显示的内容不多,当我们的程序有大量数据需要显示的时候就可以借助 ListView 来实现。布局文件 listview_layout.xml :<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android原创 2022-02-14 23:15:33 · 1222 阅读 · 0 评论 -
Android入门(八) | 常用的界面布局 及 自定义控件
文章目录LinearLayout :线性布局android:layout_gravity :控件的对齐方式android:layout_weight:权重LinearLayout :线性布局线性布局有水平、垂直两种排列方式:android:orientation="vertical" :垂直方向排列,此时高度不可被指定为 match_parent。android:orientation="horizontal":水平方向排列,此时不能将宽度指定为 match_parent。android:l原创 2022-02-05 16:21:33 · 3021 阅读 · 2 评论 -
Android入门(七) | 常用控件
文章目录TextView 控件Button 控件EditText 控件TextView 控件TextView 是 Android 中较常用的一个控件。主要用于在界面上显示一段文本信息,配置在每个活动的 xml 文件中。除了之前用到的 android:id、android:layout_width 、android:layout_height 三种属性,下面三种属性也比较常用:android:gravity :文字对齐方式,可选值有 top、bottom、left、right、center 等,可以原创 2022-01-28 17:42:09 · 6447 阅读 · 0 评论 -
Android入门(六) | Activity 的启动模式 及 生产环境中关于 Activity 的小技巧
文章目录提要standardsingleTopsingleTasksingleInstance提要standard:默认的启动方式,每次启动一个活动都会重新创建singleTop:如果改活动处于栈顶,则不会创建新活动,不处于栈顶则创建新活动singleTask:如果返回栈中存在该活动,那么将该活动之上的所有活动统统出栈,将该活动置于栈顶,如果不存在该活动则创建singleInstance:会重新启用一个新的返回栈来创建该活动,通常用于共享活动的实例standardstandard 是 A原创 2022-01-26 20:18:31 · 2083 阅读 · 0 评论 -
Android入门(五) | Activity 的生命周期
文章目录管理 Activity管理 ActivityAndroid 的应用程序运用 栈(Back Stack) 的思想来管理 Activity:每创建一个新活动,就会覆盖在旧活动之上,相当于压入栈。每当按下 返回键(Back) 或者调用 finish() ,就会销毁栈顶的 Activity,相当于弹出栈。Activity 有四种状态:运行:在栈顶时运行。暂停:不再处于栈顶、但屏幕上可见时暂停。停止:不再处于栈顶且屏幕上不可见时停止。销毁:弹栈后销毁。...原创 2022-01-25 23:11:57 · 1198 阅读 · 3 评论 -
Android入门(三) | Android 的日志工具 Logcat
文章目录Android 的日志工具 LogAndroid 的日志工具 LogLog 从属日志工具类 android.util.Log ,该类提供了五个方法供我们打印日志:Log.v() :用于打印那些最为琐碎的、意义最小的日志信息。对应级别 verbose,是 Android 日志里面级别最低的一种。Log.d() :用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的。对应级别 debug,比 verbose 高一级。Log.i() : 用于打印一些比较重要的数据,这些数据应该原创 2022-01-24 11:44:23 · 1549 阅读 · 0 评论 -
Android入门(二) | 项目目录及主要文件作用分析
文章目录项目目录分析app目录分析AndroidManifest.xml 分析MainActivity.kt 分析build.gradle 分析最外层目录下的 build.gradleapp 目录下的 build.gradle项目目录分析我们来看一下 src/main/res 下的一些文件:.gradle 和 .idea :这两个目录下放置的都是 Android Studio 自动生成的一些文件,我们无须关心,也不要去手动编辑。.app:项目中的代码、资源等内容几乎都是放置在这个目录下的,我原创 2022-01-23 20:59:03 · 2260 阅读 · 0 评论 -
Android 入门(四) | Intent 实现 Activity 切换
文章目录使用Intent在活动之间穿梭定义两个 xml 文件android:orientationmatch_parent 和 wrap_contentIntent函数的定义使用Intent在活动之间穿梭如何在切换 Actiity 时携带数据是一个重要问题。我们定义两个 xml 文件,通过 Intent 实现在活动间穿梭。什么是 xml 文件?xml 即可扩展标记语言,是互联网数据传输的重要工具,它可以跨越互联网任何的平台,在服务器之间穿梭结构化数据,不受编程语言和操作系统的限制,可以说它是一原创 2022-01-22 21:37:34 · 1583 阅读 · 0 评论 -
Android入门(一) | Android Studio的配置与使用
文章目录安装+配置Android Studio使用Android Studio安装+配置Android Studio从这一步开始:一直点 next 即可,直到存储路径的选择上,可以放到非 C 盘,这里我放到 D 盘了(截图中没改):是否要添加到开始菜单栏:直到完成:是否继承旧有配置,第一次安装的选第二个就行:谷歌问你能不能在不侵犯你隐私的前提下获取些帮助改进的信息……我选的 send:这个问题详见这篇博客:配置,第一个是标准常规配置,第二个是自定义配置,选择第一个即可:原创 2022-01-15 17:17:11 · 1758 阅读 · 0 评论