自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 【Android】应用数据和文件#存储空间概览

Android 系统提供了以下几种保存应用数据的选项:应用专属存储空间:存储仅供应用使用的文件,可以存储到内部存储卷中的专属目录或外部存储空间中的其他专属目录。使用内部存储空间中的目录保存其他应用不应访问的敏感信息。共享存储:存储应用打算与其他应用共享的文件,包括媒体、文档和其他文件。偏好设置:以键值对形式存储私有原始数据。数据库:使用 Room 持久性库将结构化数据存储在专用数据库中。下表汇总了这些选项的特点: 内容类型 访问方法

2021-11-16 17:19:02 3257

原创 文件管理项目总结

2020.6-2021.11 文件管理

2021-10-19 17:44:53 288

原创 Dialog样式Activity处理配置变更

在开发中,连续打开了几个Dialog样式的Activity之后,发现这些Activity居然都受配置变更(如折叠展开)的影响,也就是说这些Activity都会重启或者会回调onConfigurationChanged方法,这与以往的开发经验,只有顶部的Activity会重启有很大差别,这到底是为什么呢?仔细观察发现,Dialog样式的Activity是浮在底部的Activity之上的,而底部的Activity也得受配置影响啊,不然底部的Activity由于部分可视,如果还是保持原样就会很突兀。观察到这个事

2021-06-21 19:40:26 327

原创 【Android】应用资源#本地化应用

概述:Android 中的资源切换资源是指文本字符串、布局、声音、图形和 Android 应用需要的任何其他静态数据。应用可以包含多组资源,每组资源针对不同的设备配置进行定制。当用户运行应用时,Android 会自动选择并加载与设备最匹配的资源。为什么默认资源很重要当应用在没有提供特定于该语言区域的文本的语言区域中运行时,Android 就会从res/values/strings.xml加载默认字符串。如果缺少此默认文件,或者此文件缺少应用需要的字符串,那么应用就不会运行,而是显示错误。使用资源进行

2021-05-10 23:53:03 274 1

原创 【Android】应用资源#处理配置变更

某些设备配置可能会在运行时发生变化。发生这种变化时,Android 会重启正在运行的Activity(先后调用onDestroy()和onCreate())。重启行为旨在通过利用与新设备配置相匹配的备用资源来自动重新加载应用,从而帮助它适应新配置。如要妥善处理重启行为,Activity 必须恢复其先前的状态。然而,可能会遇到这种情况:重启 Activity 需要恢复大量数据、重新建立网络连接或执行其他密集操作,不仅成本高昂,而且会给用户留下应用运行缓慢的体验。在此情况下,还有两个选择:在配置变更期间保留

2021-04-26 23:44:53 168

原创 【Android】应用资源#概览

开发者应始终外部化应用资源,以便单独对其进行维护。分组资源类型项目res/目录中支持的常用资源目录:目录资源类型animator/用于定义属性动画的 XML 文件anim/用于定义渐变动画的 XML 文件(属性动画也可保存在此目录中)color/用于定义颜色状态列表的 XML 文件drawable/位图文件或编译为可绘制对象资源子类型的 XML 文件mipmap/适用于不同启动器图标密度的可绘制对象文件layout/用于定义用户界面布局的

2021-04-18 23:41:24 241

原创 《Android开发艺术探索》读书笔记2.IPC机制

1. Android IPC简介IPC是Inter-Process Communication的缩写,是指两个进程之间进行数据交换的过程。 多进程的情况分为两种,第一种情况是一个应用因为某些原因自身需要采用多进程模式来实现,另一种情况是当前应用需要向其他应用获取数据。2. Android中的多进程模式1. 开启多进程模式在Android中使用多进程只有一种方法,那就是给四大组件在...

2021-03-15 21:23:33 162

原创 线程通信之AsyncTask源码分析

AsyncTask的原型如下:package android.os;public abstract class AsyncTask<Params, Progress, Result> { ...}可见,AsyncTask是抽象类,必须实现它的子类才能使用,下面都是可重写的方法: @WorkerThread protected abstract Result...

2021-03-15 21:19:37 129

原创 Android知识体系查漏补缺(五)常见机制

文章目录1. 线程与线程池1. 指定要在线程上运行的代码2. 创建管理多个线程的管理器(线程池)3. 在线程池中的线程上运行代码4. 与界面线程通信1. 线程与线程池将长时间运行的数据密集型运算拆分为在多个线程上运行的小运算,通常可以提高运算的运行速度和效率。如果设备的 CPU 包含多个处理器(内核),系统可以并行运行线程,而不是让每个子运算等待机会运行。1. 指定要在线程上运行的代码...

2021-03-13 23:27:08 178

原创 【Android】应用数据和文件#访问共享存储空间中的媒体文件

Android为了提供更丰富的用户体验,许多应用允许用户贡献和访问外部存储卷上可用的媒体。 媒体存储(media store) 框架为媒体集合提供了一个优化的索引,它允许更容易地检索和更新这些媒体文件。即使应用程序被卸载了,这些文件仍然保留在用户的设备上。该系统自动扫描外部存储卷,并将媒体文件添加到以下明确定义的集合中:图片,包括照片和截图,存储在MediaStore.Images。视频,...

2021-03-13 23:22:16 1788

原创 【Android】细说网页截图

在开发浏览器时,需要实现截图功能。具体需求就是对Android WebView进行截图。由于浏览器的开发是基于原生Browser进行开发,而原生Browser已经实现了这个功能,所有可以直接使用。原生Browser的仓库地址:https://android.googlesource.com/platform/packages/apps/Browser/1. 对WebView进行截图在com...

2021-03-13 23:14:33 223

原创 《Android源码设计模式解析与实战》读书笔记1.面向对象的六大原则

走向灵活软件之路——面向对象的六大原则1. 优化代码的第一步——单一职责原则Single Responsibility Principle,缩写是SRP,定义:就一个类而言,应该仅有一个引起它变化的原因。 简单来说,一个类中应该是一组相关性很高的函数、数据的封装,两个完全不一样的功能就不应该放在一个类中。 实例: 将ImageLoader一拆为二,ImageLoader只负责...

2021-03-13 22:02:29 89

原创 《Android群英传》读书笔记13.Android实例提高

1. 移动迷宫——拼图游戏在开始之前,可以先创建一些常用的共通方法、共通资源,这些方法或者资源并不用每次都创建,可以建一个代码仓库进行积累。1.1. 准备工作1. 获取屏幕相关属性(→ScreenUtil.java) 这些方法基本在每个App中都会用到,所以非常适合作为工具类来使用。2. 美化按钮通过定义shape和selector来对原生的按钮进行美化是一个...

2021-03-13 21:57:10 127

原创 对Android嵌套滑动的简单理解

MotionEvent事件(在onTouchEvent中消费)NestedScrollingChild接口(以实现了该接口的RecyclerView为例)NestedScrollingParent接口(自己实现包裹子布局的父布局)ACTION_DOWNstartNestedScrollonStartNestedScrollonNestedScrollAccepted...

2020-04-17 14:23:09 222

原创 Handler, Looper, MessageQueue, Message源码详细分析

根据Android开发者文档,Handler的主要用途有两个:将Message和Runnable对象在将来的某个时刻计划执行。使要在与自己的线程不同的线程上执行的操作入队。Handler的原型如下所示:package android.os;public class Handler { final Looper mLooper; final MessageQueue ...

2020-03-09 21:24:55 228

原创 Android知识体系查漏补缺(一)系统源码

文章目录1. 系统源码1. 组件1. 四大组件1. Activity(活动)1. 启动过程2. 启动模式3. 生命周期2. Service(服务)1. 启动方式2. 生命周期3. IntentService3. BroadcastReceiver(广播接收器)1. 广播的使用场景2. 接收广播3. 发送广播4. ContentProvider(内容提供程序)1. 访问提供程序2. 内容 URI3....

2020-03-06 21:30:12 146

原创 【Android】数据和文件存储概览

Android 中有4种可使用的不同数据存储选项:内部文件存储:在设备文件系统中存储应用私有文件。外部文件存储:在共享外部文件系统中存储文件。此方式通常用于共享的用户文件,如照片。共享首选项:在键值对中存储私有的原始数据。数据库:在私有数据库中存储结构化数据。文章目录1. 内部文件存储2. 外部文件存储2.0. 请求外部存储权限2.1. 公开文件2.2. 私有文件3. 分区存储1....

2020-02-21 18:21:22 900

原创 对属性动画的简单理解

按目前来说,Android的动画分为两大类,视图动画以及属性动画。由于属性动画更加灵活,目前主要使用属性动画。属性动画使用ValueAnimator或ObjectAnimator来实现单个动画,将多个动画可以组合成一组动画AnimatorSet。ValueAnimator只对单个值进行持续变化,需要借助动画监听器监听这个变化中的值。以下为使用 ValueAnimator添加动画效果: ...

2020-02-16 17:19:38 232

原创 对Canvas, Bitmap, Drawable的简单理解

Canvas,直译就是画布。官方定义如下:/** * The Canvas class holds the "draw" calls. To draw something, you need * 4 basic components: A Bitmap to hold the pixels, a Canvas to host * the draw calls (writing into...

2020-01-02 16:04:35 298

原创 WebSettings.setTextZoom不起作用的原因

需求是基于Android原生浏览器开发一个浏览器,其中有字号调整这个功能,毫无疑问,这个功能是通过WebSettings.setTextZoom来实现的,然而实际开发的时候发现,大多数网页的文字大小都没有变化。→ 为了排查原因,首先上网查了一圈,无果。→ 对比小米浏览器,发现能实现这个功能,难道是自己去实现的?拿来反编译,在一堆代码中发现了v.d(WebView paramWebView)方法...

2019-06-17 16:31:15 2965

原创 onCreateContextMenu没有调用的可能原因

我在Fragment里加了一个ListView,然后使用registerForContextMenu进行了注册,并重写了onCreateContextMenu回调方法。然而实际调试的时候发现,onCreateContextMenu这个方法居然没有被回调到,折腾了好久。最后发现,我在ListView所使用的Adapter的getView方法里,进行了view.setOnClickListener...

2019-06-05 18:59:44 858

原创 《Android开发艺术探索》读书笔记1.Activity的生命周期和启动模式

1. Activity的生命周期全面分析1. 典型情况下的生命周期分析Activity启动 ↓onCreate ↓onStart ←-- onRestart ↓ ↑onResume | ↓ |Activity运行 | ↓ |onPause | ↓ |onStop ---------- ↓onDestroy ↓Activity销毁当新启...

2018-12-10 15:47:35 305 1

原创 仿“小爱同学”首页上划动效

由于业务需要,仿小米手机的“小爱同学”这个应用的首页上划动效,如下图所示。通过一番搜索,可以使用Material Design来实现这个效果,具体来说就是使用 CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout这几个类的介绍可以参考以下几篇文章: 细说 AppbarLayout,如何理解可折叠 Toolbar 的定制 玩转Ap...

2018-10-31 11:36:03 1456

原创 Android中常用的数据结构

interface Collection<E> // 集,一组数据|--> interface Set<E> // 集合,不允许重复元素| |--> interface SortedSet<E> // 对元素进行排序| | |--> interface NavigableSet<E> // 可获得离指定元素最近的元素| | | |--> class TreeSet<E> // 使用

2018-06-24 21:02:48 824

原创 《Android开发艺术探索》读书笔记11.Android的线程和线程池

从用途上来说,线程分为主线程和子线程,主线程主要处理和界面相关的事情,而子线程则往往用于执行耗时操作。一个线程池中会缓存一定数量的线程,通过线程池就可以避免因为频繁创建和销毁线程所带来的系统开销。1. 主线程和子线程主线程是指进程所拥有的线程,在Java中默认情况下一个进程只有一个线程,这个线程就是主线程。子线程也叫工作线程,除了主线程以外的线程都是子线程。 Android沿用了Ja...

2018-06-12 16:34:22 274

原创 《Android开发艺术探索》读书笔记10.Android的消息机制

从开发的角度来说,Handler是Android消息机制的上层接口,这使得在开发过程中只需要和Handler交互即可。Handler并不是专门用于更新UI的,只是常被开发者用来更新UI。 Android的消息机制主要是指Handler的运行机制,Handler的运行需要底层MessageQueue和Looper的支撑。我们经常提到的主线程,也叫UI线程,它就是ActivityThread,Act...

2018-06-06 12:03:02 270

原创 用户中心项目总结

注册页+忘记密码页 流程:输入手机号→发送验证码→输入验证码→下一步→输入密码→完成 异常处理:手机号格式错误,手机号已注册,发送验证码失败,发送验证码90s后才能再次发送,验证码错误,密码不合法,没有网络等。 架构使用了MVP模式,并且运用了依赖倒置原则。 布局用到的特殊属性:TextView android:drawableLeft The drawable to be...

2018-06-03 22:12:58 1901

原创 语音精灵项目总结

2016.12-2018.7 语音精灵 模块负责人

2018-05-23 19:09:56 581

原创 java.lang.NoSuchMethodError的解决办法

运行代码的时候,出现了java.lang.NoSuchMethodError错误:D/AndroidRuntime(10278): Shutting down VME/AndroidRuntime(10278): FATAL EXCEPTION: mainE/AndroidRuntime(10278): Process: com.konka.SmartControl, PID: 10278...

2018-04-02 18:30:45 9269

原创 Android单元测试学习笔记

在网上找到一份写得挺不错的Android单元测试的详细教程,作者是小创,在SegmentFault他的主页可以看到他写的文章,不过目测这些文章也是从他的个人主页同步过来的。我已阅读的篇章如下:Android 单元测试: 首先,从是什么开始Android单元测试(二):再来谈谈为什么Android单元测试(三):JUnit单元测试框架的使用Android单元测试(四)

2017-09-25 00:34:06 369

原创 《Android群英传》读书笔记10.Android性能优化

1.布局优化1.1. Android UI渲染机制在Android中,系统通过VSYNC信号触发对UI的渲染、重绘,其间隔时间是16ms。这个16ms其实就是1000ms中显示60帧画面的单位时间,即1000/60。如果不能在16ms内完成绘制,那么就会造成丢帧现象。 检测UI渲染时间的工具:开发者选项→GPU呈现模式分析→在屏幕上显示为条形图。1.2. 避免Overdraw过度绘制会浪费很多的C

2017-02-28 17:48:09 549

原创 《Android群英传》读书笔记9.Android系统信息与安全机制

1. Android系统信息获取要获取系统的配置信息,通常可以从以下两个方面获取1.1. android.os.BuildBuild类包含了系统编译时的大量设备、配置信息1.2. SystemPropertySystemProperty包含了许多系统配置属性值和参数,很多信息与通过Build获取的值是相同的1.3. Android系统信息实例String board = Build.BOARD;S

2017-02-17 19:04:04 447

原创 《Android群英传》读书笔记8.Activity与Activity调用栈分析

1. Activity1.1. 起源Activity是与用户交互的第一接口,系统采用Activity栈的方式来管理Activity。1.2. Activity形态Active/Running: Activity处于Activity栈的最顶层,可见,并与用户进行交互Paused: Activity失去焦点,被一个新的非全屏的Activity或者一个透明的Activity放置在栈顶。只是失去了与用户

2017-02-08 15:19:43 404

原创 《Android群英传》读书笔记6.Android绘图机制与处理技巧

1. 屏幕的尺寸信息1.1. 屏幕参数屏幕大小:指屏幕对角线的长度,例如4.7寸手机、5.5寸手机分辨率:指手机屏幕的像素点个数,例如720×1280,指宽有720个像素点,而高有1280个像素点PPI:每英寸像素(Pixels Per Inch)又被称为DPI(Dots Per Inch),由对角线的像素点数除以屏幕的大小得到1.2. 系统屏幕密度系统定义了几个标准的DPI值,作为手机的固

2017-02-06 17:13:40 362

原创 《Android群英传》读书笔记5.Android Scroll分析

相对于Android 2.X版本中的长按、点击操作,从Android 4.X开始,滑动操作出现在了Android中1. 滑动效果是如何产生的滑动一个View,本质上就是移动一个View,通过不断地改变View的坐标来实现这一效果1.1. Android坐标系屏幕最左上角的顶点作为Android坐标系的原点,从这个点向右是X轴正方向,从这个点向下是Y轴正方向。 系统提供了getLocationOnS

2017-02-06 15:41:35 493

原创 《Android群英传》读书笔记4.ListView使用技巧

在Android 5.X时代,RecyclerView逐渐取代ListView,但ListView使用范围依然广泛。1. ListView常用优化技巧1.1. 使用ViewHolder模式提高效率ViewHolder模式利用ListView的视图缓存机制,避免每次调用getView()时都通过findViewById()实例化控件。使用ViewHolder和BaseAdapter比不使用ViewHo

2017-02-06 15:33:50 345

原创 《Android群英传》读书笔记3.Android控件架构与自定义控件详解

1. Android控件架构ViewGroup控件与View控件组成控件树,findViewById()就是在控件树中DFS查找元素。 通过设置requestWindowFeature(Window.FEATURE_NO_TITLE)来设置全屏显示,视图树中的布局就只有Content了,这就是调用requestWindowFeature()方法一定要在调用setContentView()方法之

2017-02-06 15:12:23 386

原创 《Android群英传》读书笔记2.Android开发工具新接触

IDE,集成开发环境1. Eclipse → Android Studio1) Android Studio 更专业,除移动端,融合车载、可穿戴、TV等 2) 配置JDK、安装Android Studio2. 更新SDK、常用界面、导入工程3. ADB命令 Android Debug Bridge (于platform-tools)1) adb shell 2) adb install -r A

2017-02-06 14:53:59 404

原创 《Android群英传》读书笔记1.Android体系与系统架构

1. Android系统架构应用层:Application (NDK App & SDK App) 框架层:Framework 库和运行时:Dalvik(libraries | 运行时编译) ART(Android 5.x开始,安装时编译) 内核层:Linux 内核2. Android App 组件架构 (在应用层)1) Activity, BroadcastReceiver, Content

2017-02-06 14:51:48 340

原创 设计模式之个人通俗理解

参考了维基百科对设计模式的讲解,以及CSDN上的博文,对23种设计模式有了一定的了解。

2016-02-26 12:09:34 2584

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除