Android开发
文章平均质量分 69
码农小舍
欢迎关注我的公众号——小舍,有更多有趣的内容哦~
展开
-
Android 中基于宽度的屏幕适配方案
目录1 一些基本概念2 传统标准适配难题3 基于宽度的屏幕适配原则1 一些基本概念ppi:pixels per inch,即物理设备每英寸的像素数。计算公式为:ppi = sqrt(width² + height²) / 屏幕尺寸(inch)为什么一定要计算出屏幕斜线的像素数呢?因为手机的屏幕尺寸指的就是手机屏幕斜线的长度(单位:英寸)。所以,理论上来说,如果知道屏幕宽度的尺寸,也可以直接通过 ppi = width / 宽度尺寸(inch) 计算出来。dpi:dot pe原创 2021-08-10 21:49:09 · 513 阅读 · 5 评论 -
Android mvvm 之 databinding 原理
本文为原创内容,转载请注明出处——小舍目录1 Data Binding 的结构1.1 rebind 行为1.2 observe data 行为1.3 observe view 行为2 样例分析——谷歌 sunflower 的改造2.1 Data——FakeData2.2 View——fragment_plant_detail.xml2.3 ViewDataBinding——FragmentPlantDetailBinding2.4 adapter 绑定说明3 免 find原创 2021-07-29 14:40:02 · 544 阅读 · 0 评论 -
Android mvvm 之 LiveData 的原理
目录1. 生命周期感知1.1 生命周期感知组件1.2 LifecycleOwner 的状态和事件模型2. LiveData 与 LifecycleOwner 的双向订阅2.1 LiveData 订阅生命周期变化2.2 LifecycleOwner 订阅数据变化2.3 多对多的双向订阅网3 LiveData 的事件变化4 LifecycleOwner 的事件变化4.1 Lifecycle 接口的实现——LifecycleRegistry4.1.1 LifecycleRe原创 2021-07-19 18:44:25 · 594 阅读 · 8 评论 -
Android mvvm框架之ViewModel篇
目录1 什么是 ViewModel1.1 先考虑两个场景1.2 缺点1.3 特别说明1.4 ViewModel 解决的问题2 ViewModel 实现原理2.1 ViewModel 类2.2 ViewModel 的构造过程3 ViewModel 与配置无关的原理(与宿主 Controller 俱生俱灭)3.1 ViewModelStore 树3.2 系统级的配置无关支持4 FragmentActivity 中的 ViewModel 生命周期5 多 Control原创 2021-07-12 21:40:58 · 926 阅读 · 6 评论 -
JSON 简介
1. JSON 结构图有过 android 互联网开发经验的同学对 JSON 一定不会陌生。在下载网络数据时我们经常需要首先获取下载数据的结构,而JSON往往成为此种结构的首选方式,此外还有 XML 的方式,这个以后再介绍,下图是一个 JSON object 的树状结构图:2. 相关说明一个 JSON object 由一原创 2013-04-21 16:24:12 · 992 阅读 · 0 评论 -
不要通过终止进程的方式清理内存
通过终止进程来清理内存的方案是不合适的,理由如下:1、 android 有自身的进程和内存管理机制,其设计规范是要保证程序尽可能快地启动,这就要求程序退出后仍然占用内存保存数据;2、 android 的内存管理策略保证在新程序载入时有足够的内存,当内存不足时会自行关闭优先级低的进程来释放内存;3、 进程数据长期缓存在内存,对于 android 来说不是缺陷,而是优势,它尽可原创 2013-07-05 14:34:41 · 2257 阅读 · 0 评论 -
自定义 Preference Header 布局
1. Preference Header 概述:对于什么是 Preference Header,以及何时使用 Preference Header,请参考我的另一篇博文:何时使用 Preference Headers2. 自定义 Preference Header 布局的必要性:Preference Header 的设计初衷是作为复杂设置选项的一个简单抽象或者概括,所原创 2013-07-26 11:41:41 · 3674 阅读 · 2 评论 -
关于在 Service 或 BroadcastReceiver 中 startActivity 的问题
1. 不从后台启动 Activity 准则:在谷歌的 Android API Guides 中,特意提醒开发者不要在后台启动 activity,包括在 Service 和 BroadcastReceiver 中,这样的设计是为了避免在用户毫不知情的情况下突然中断用户正在进行的工作,在 http://developer.android.com/guide/practices/seaml原创 2014-01-13 17:42:17 · 10998 阅读 · 1 评论 -
浅探 Notification sound 的焦点管理
1. 通知播报流程分析:Android 中用 NotificationManager 处理通知事务,在构建 Notification 时,一般会传入一个音频地址给其中的 sound 字段进行播报,而播报的处理是通过启动 com.android.server.NotificationManagerService 这个服务来完成的,NotificationManagerService 排队原创 2014-01-13 17:00:53 · 1987 阅读 · 0 评论 -
Handler, Message, MessageQueue, Looper —— 吸血鬼和狼人之战的情报网络
1. 吸血鬼和狼人之战在讨论 Handler 机制之前,我们先来讲一个故事:吸血鬼和狼人打仗,战争进入僵持阶段,吸血鬼兵团为了打探狼人军团的动静,决定派遣一名密探潜入狼人军团内部刺探军情,同时命令一名吸血鬼听风者守候在家门口等待吸血鬼密探发来的情报。吸血鬼密探带着专门传递情报的吸血鬼通讯员潜入了狼人军团的内部。吸血鬼密探很快和狼人军团内部打成一片,并且获得了很多原创 2014-03-26 15:00:02 · 1382 阅读 · 0 评论 -
Java URI 和 android Uri 中的 getSchemeSpecificPart() 方法
1. 标准 URI 的语法组成标准的 URI 语法组成如下:[scheme:]scheme-specific-part[#fragment]各部分说明请参考:http://www.cjsdn.net/doc/jdk50/java/net/URI.htmlgetSchemeSpecificPart() 方法即返回中间的 scheme-specific-part 必选部分。原创 2013-03-14 18:18:55 · 4837 阅读 · 0 评论 -
中文乱码解决及中文编码成UTF8
1. 中文乱码Java中有些类对中文的支持可能有问题,例如在最近用 AndroidHttpClient API 解析 web url 时,通过 303 跳转返回的跳转 url 中包含了中文,但是中文部分显示为类似 ”街景总结这样的乱码,导致 url 无法访问,代码如下,其中的 location 文件名部分中包含了中文乱码: final HttpClient clie原创 2013-03-12 11:17:11 · 5213 阅读 · 0 评论 -
利用ViewPager实现可左右滑动的Action Tab
1. ViewPager要点:ViewPager 是一个布局管理类(layout manager),用于提供页面的左右滑动功能,类似于ListView,也有为ViewPager提供 数据(Fragment)的 adapter 控制类(FragmentPagerAdapter, FragmentStatePagerAdapter)。ViewPager 经常和 Fragment 一原创 2012-11-06 18:42:33 · 8122 阅读 · 5 评论 -
View的setSelected()与invalidate()
1. 问题:最近在运用ListView做刷新操作时,由于刷新不及时,导致列表布局混乱(前一行的某些布局元素被画在了后一行)。2. 解决方案:1、首先想到需要进行重画,于是调用其invalidate()方法,不管用,后来发现用手指触摸时马上能恢复正常布局,于是:2、调用ListView的setSelected(!ListView.isSelected())方法,这样就能及时刷原创 2012-11-07 18:40:21 · 3715 阅读 · 0 评论 -
自定义SearchView
1. 基本原理:SearchView是android中一个搜索框组件,它不是一个单独的view,而是一个LinearLayout布局,包括表示Search图标和清除图标等其它图标的imageView、具有下拉建议列表的AutoCompleteTextView等,有时候我们需要对SearchView做一些特定的修改,而SearchView本身却又没有提供相关的接口,这时需要对SearchView原创 2012-11-07 21:16:56 · 2846 阅读 · 0 评论 -
通过RelativeLayout.LayoutParams.addRule()方法在代码中设置RelativeLayout相关属性
1. 原理说明:我们知道,在 RelativeLayout 布局中有很多特殊的属性,通常在载入布局之前,在相关的xml文件中进行静态设置即可。但是,在有些情况下,我们需要动态设置布局的属性,在不同的条件下设置不同的布局排列方式,这时候就需要用到 RelativeLayout.LayoutParams.addRule() 方法,该方法有两种重载方式:addRule(int原创 2012-11-08 21:56:09 · 22159 阅读 · 0 评论 -
关于android底层库编译出现“undefined reference to `__android_log_print'”的解决方法
问题描述:很多时候,我们需要在自己的android应用程序中调用到其它语言(C)编写的高效率底层模块,一般通过 System.loadLibrary(libname) 来实现,同时我们还需要调试这个用C写的库,在 .c 源文件中打印 log 信息。方法步骤:1、在源文件中添加如下头文件:#include 2、在 Android.mk 文件中包含相关的库:原创 2012-12-11 17:22:46 · 8274 阅读 · 0 评论 -
eclipse中导入android工程时因源工程java编译环境不同导致编译错误的解决方法
1. 问题描述最近我将一个开源项目的工程导入 eclipse 中时发现编译错误如下:The method run() of type XXX must override a superclass method... 可是仔细查看发现 XXX 这个类只是实现了一个普通的 Runnable 接口,然而在其实现方法 run() 处却报出这样的编译错误实属奇怪,因为系统中 java 的安装和环境配置都原创 2013-03-03 20:38:17 · 956 阅读 · 0 评论 -
ANR错误 log 调试方法
什么是ANR?ANR——Application Not Responding,就是应用程序无响应的意思,导致此错误通常是由于android主线程中的一个操作执行时间过长,当超过5秒不能响应用户操作时,便出现此异常。如何调试ANR?(常规log + traces)1. 根据log跟踪 ANR 错误是首先想到的方法,出现ANR错误时,在DDMS中键入 “ANR”原创 2013-02-19 11:00:59 · 6691 阅读 · 0 评论 -
何时使用 Preference Headers
1. 问题提出:如何处理需要分屏分组的设置项?在谷歌开发文档中以Android 3.0版本作为基线,对此问题进行不同的处理:Android 3.0之前:采用PreferenceScreen嵌套的方法;Android 3.0及之后:采用Preference Headers的方法。2. 采用 PreferenceScreen 嵌套采用此方法的preference.x原创 2013-02-25 16:57:40 · 12088 阅读 · 9 评论 -
PreferenceActivity 中的 onBuildHeaders() 调用时机
1. onBuildHeaders(List)在前一篇博文中(何时使用 Preference Headers)我们讲述了 Preference Headers 的作用和使用场景,onBuildHeaders 这个方法是在 PreferenceActivity 中用于创建和初始化 headers 的,创建 headers 之后我们可以在程序中引用 headers 实例,但需要注意其创建的时机原创 2013-02-26 10:47:39 · 3621 阅读 · 0 评论 -
如何监听 android 手机情景模式(有声、静音、振动)?
当用户设置情景模式时,系统会广播一个 RING_MODE_CHANGE_ACTION 消息,于是我们可以定义一个广播接收器,监听此消息,然后通过 AudioManager 提供的接口判断当前的情景模式做出特定的处理。2. 关键代码private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Overrid原创 2013-03-08 17:33:51 · 4912 阅读 · 0 评论 -
布局中的Padding与Margin的区别
在android的布局设计中,我们经常会在布局文件中为layout或view设置padding和margin属性,这两者的区别是:设置了padding属性的view,规定其直接subview与其四周边缘之间的间距,作用的对象是它所有的直接subviews,若只需设置与左边缘之间的间距则可以只设置padding_left属性,其它三面类似;设置了margin属性的view,规定自身与其par原创 2012-11-07 21:08:52 · 779 阅读 · 0 评论