Android开发整理
文章平均质量分 84
Android常用开源框架使用说明,源码分析,从Android开发的实践性出发,归纳总结了Android的各项技术要点。包括基础知识,还有一些易错分析。
robert_chao
欢迎关注我的博客 https://www.lelecoding.cn
展开
-
lambda表达式介绍以及Android Studio引入lambda
一、简介“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包。运算符将表达式分为两部分,左边指定输入参数,右边是lambda的主体。 lambda表达式:原创 2017-01-11 10:52:15 · 5325 阅读 · 0 评论 -
移动设备无线投屏到电视机
移动设备无线投屏到电视机主要有三种种技术:AirPlay、DLNA与Miracast技术。DNLA,Digital Living Network Alliance,是索尼、英特尔、微软等发起的一套 PC、移动设备、消费电器之间互联互通的协议。它们的宗旨是“随时随地享受音乐、照片和视频”。DLNA与苹果的AirPlay功能比较类似,协议也大体相同,他们都可以让你手机中的媒体内容投放到电视屏幕里。不同的是手机上的DLNA 并没有类似Apple TV的AirPlay 的镜像功能,也没有Apple TV 所支持原创 2016-10-23 21:31:37 · 23561 阅读 · 2 评论 -
Android日志的使用技巧
Android系统提供了logcat工具来记录打印log,先来聊一下logcat的使用adb logcat --helpUsage: logcat [options] [filterspecs]options include: -s Set default filter to silent. Like specifying filter原创 2016-09-27 20:21:36 · 3721 阅读 · 0 评论 -
Android 的String资源格式化方法
很多时候我们感性Google在设计Android时遵守了大量MVC架构方式,可以让写公共代码、美工和具体逻辑开发人员独立出来。有关Android 的资源文件values/strings.xml中如何实现格式化字符串呢? stringdemo hello robert上面是一段简单的字符串资源文件,没有用到格式化,因为比较简单直接描述了意思,当我们设计一个类似 Delete原创 2016-08-25 09:27:49 · 4446 阅读 · 0 评论 -
SQLite清空表并将自增列归零
SQL标准中有TRUNCATE TABLE语句,用来清空表的所有内容。但SQLite不支持这个语句。在SQLite中直接使用“DELETE FROM TableName”就可以了。对于大多数DBMS来说,用DELETE不如用TRUNCATE 速度快,因为TRUNCATE 不用访问整个表,不用记录数据的变动。SQLite虽然不支持TRUNCATE,但它对DELETE做了优化:“When the WHERE is omitted from a DELETE statement and the table be原创 2016-07-20 22:12:15 · 21390 阅读 · 2 评论 -
Android不依赖Activity的全局悬浮窗实现
Android悬浮窗实现 实现基础Android悬浮窗实现使用WindowManager ,WindowManager介绍 通过Context.getSystemService(Context.WINDOW_SERVICE)可以获得 WindowManager对象。每一个WindowManager对象都和一个特定的 Display绑定。想要获取一个不同的display的W原创 2016-07-02 21:58:01 · 26757 阅读 · 2 评论 -
Activity的生命周期和启动模式详解
BACK键: 当我们按BACK键时,我们这个应用程序将结束,这时候我们将先后调用onPause()->onStop()->onDestory()三个方法。再次启动App时,会执行onCreate()->onStart()->onResume()HOME键: 当我们打开应用程序时,比如浏览器,我正在浏览NBA新闻,看到一半时,我突然想听歌,这时候我们会选择按HOME键,然后去打开音乐应用程序,而当我们按HOME的时候,Activity先后执行了onPause()->onStop()这两个方法,这时原创 2016-07-01 10:12:42 · 7719 阅读 · 0 评论 -
Android进程分类与管理
Android采 取了一种有别于Linux的进程管理策略,有别于Linux的在进程活动停止后就结束该进程,Android把这些进程都保留在内存中,直到系统需要更多 内存为止。这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度。那Android什么时候结束进程?结束哪个进程呢?之前普遍的认识是Android是依据一个名为LRU(last recently used 最近使用过的程序)列表,将程序进行排序,并结束最早的进程。但实际上这里面有更多的细节原创 2016-06-30 13:53:05 · 6116 阅读 · 0 评论 -
Android热补丁技术方案整理
项目快速迭代过程中,不可避免的出现BUG,Android线上出现问题,通常需要发版解决。紧急发版,用户不一定升级,强制升级又不友好,有什么更好的解决方案呢?这就用到了热修复技术。QQ团队的hotfix,后来发展成为RocooFix,GitHub地址: https://github.com/dodola/HotFix原理详细介绍官方文章:安卓App热补丁动态修复技术介绍阿里巴巴的AndFix原创 2016-06-29 12:06:54 · 8985 阅读 · 0 评论 -
AsyncQueryHandler异步操作数据库的使用和源码解析
一.AsyncQueryHandler的作用:异步的查询操作帮助类,它可以处理增删改查。当然也可以使用ContentProvider去操作数据库。这在数据量很小的时候是没有问题的,但是如果数据量大了,可能导致UI线程发生ANR事件。当然也可以写个Handler去做这些操作,只是每次使用ContentProvider时都要再写个Handler,必然降低了效率。因此API提供了一个操作数据库的通用方法。它提供:startInsert,startDelete,startUpdate,startQuery这四个操原创 2016-06-28 17:35:15 · 4926 阅读 · 0 评论 -
Android中asset文件夹和raw文件夹
res/raw和assets的相同点:两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。assets和res/raw工程目录下都可以放一些小于1M的文件(2.3版本以前要求,否则将不能读出数据。),这些文件将被打包到APK中应用使用。assets目录下的文件将不做任何处理被打包,,如果你的资源很大,例如视频等等,应该单独存储在文件系统中。res/raw和assets的不同点:1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filena原创 2016-06-27 22:12:33 · 5492 阅读 · 0 评论 -
Activity启动过程源码分析
老罗的Android系统源码分析讲的很不错,网上有很不同层面多源码分析。了解细节,还是自己看源码最直接。个人并没有透彻的研究过Android系统,这一系列的博客就当是读Android源码笔记了。有不对的地方还请多指教。startActivity方法context调用startActivity()实际是调用了ContextImpl的startActivity()方法, @Override public void startActivity(Intent intent, Bundle opt原创 2016-06-26 09:10:21 · 4157 阅读 · 3 评论 -
Android的各种Drawable详解
android内置了如下几种Drawable类型:ColorDrawable、GradientDrawable、BitmapDrawable、 NinePatchDrawable、InsetDrawable、ClipDrawable、ScaleDrawable、 RotateDrawable、AnimationDrawable、LayerDrawable、LevelListDrawable、 StateListDrawable、TransitionDrawableShapeDrawable。 An原创 2016-06-25 11:42:38 · 6396 阅读 · 0 评论 -
Android屏幕适配
一、一些基本概念1、长度(真实长度):英寸、inch2、分辨率:density 每英寸像素数 dpi(密度)3、像素:px4、dip的公式:px /dip=dpi/160 所以 dip 类似于英寸、长度(dp=dip,sp类似于dip) dip=160*inchdip= 160/dpi * px当dip一定时,dpi 越大,px就越大5、广义分辨率=长px*宽px原创 2016-06-23 22:41:26 · 4347 阅读 · 5 评论 -
Android差分升级原理和实现方式
增量升级的原理很简单,即首先将应用的旧版本Apk与新版本Apk做差分,得到更新的部分的补丁,例如旧版本的APK有20M,新版的有21M,更新的部分则可能只有1M左右,这里需要说明的是,得到的差分包大小并不是简单的相减,因为需要包含一些上下文相关的东西,使用差分升级的好处显而易见,那么你不需要下载完整的21M文件,只需要下载更新部分就可以,而更新部分的差分包很小,可以很大程度上减少流量的损失。bsdiff oldfile newfile patchfilebspatch oldfile newfile p原创 2016-06-21 21:08:10 · 24116 阅读 · 1 评论 -
Android的布局复用与优化
在布局优化中,Android的官方提到了这三种布局<include />、<merge />、<ViewStub />,并介绍了这三种布局各有的优势,下面也是简单说一下怎么使用.1、布局重用<include />1)<include />标签可以使用单独的layout属性,这个也是必须使用的。2)标签若指定了ID属性,而你的layout也定义了ID,则你的layout的ID会被覆盖3)在include标签中所有的android:layout_*都是有效的,前提是必须要写layout_width和la原创 2016-06-20 23:28:43 · 5503 阅读 · 0 评论 -
Android apk打包过程
android打包过程,下面这张图取自Android开发权威指南,非常清晰。整个过程使用的工具有名称 功能介绍 在操作系统中的路径aapt Android资源打包工具 ${ANDROID_SDK_HOME}/platform-tools/apptaidl Android接口描述语言转化为.java文件的工具 ${ANDROID_SDK_HOME}/platform-tools/aidljavac Java Compiler ${JDK_HOME}/javac或/usr/bin/javacdex原创 2016-06-18 22:57:07 · 5703 阅读 · 0 评论 -
android Cursor的自动管理方式
新手在使用数据库的时候,很容易忘记关闭Cursor,造成严重内存泄漏。有什么好的方法解决这个问题呢?除了自己管理Cursor,有什么办法把Cursor交给系统管理,而不需要自己主动close呢?manageQuery可以为你维护这个cursor。在你退出activity时为你自动关闭。 The method managedQuery(Uri, String[], String, String[], String) from the type Activity is deprecated。android原创 2016-06-17 21:43:39 · 6806 阅读 · 0 评论 -
ListView注意的问题和源码解析(上)
ListView中涉及的设计模式ListView源码分析,和常见的问题分析设置没有数据时显示的空布局显示失败listView中多种类型布局使用OnItemClickListener中获取获取点击的item数据原创 2016-06-13 18:04:50 · 2417 阅读 · 0 评论 -
Android WebView问题汇总以及解决方法
Android WebView常见问题解决方案汇总:1、Android webview背景设置为透明无效webview是一个使用方便、功能强大的控件,但由于webview的背景颜色默认是白色,在一些场合下会显得很突兀(比如背景是黑色)。此时就想到了要把webview的背景设置为透明,这样就可以与其背景融为一体。在2.X的平台下,一般设置webview背景为透明的方法如下:原创 2016-06-11 21:46:22 · 8630 阅读 · 0 评论 -
Fragment和Activity生命周期以及横竖屏切换对生命周期的影响
Fragment生命周期图解,fragment和activity生命周期对比1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏原创 2016-06-11 10:04:37 · 5159 阅读 · 0 评论 -
Android获取view高度
getMeasuredHeight()与getHeight的区别实际上在当屏幕可以包裹内容的时候,他们的值相等,只有当view超出屏幕后,才能看出他们的区别:getMeasuredHeight()是实际View的大小,与屏幕无关,而getHeight的大小此时则是屏幕的大小。当超出屏幕后,getMeasuredHeight()等于getHeight()加上屏幕之外没有显示的原创 2016-05-30 23:17:14 · 6562 阅读 · 1 评论 -
有效避免OOM--合理使用软引用和弱引用
在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及(reachable)状态,程序才能使用它。从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用原创 2016-06-05 23:17:02 · 6384 阅读 · 0 评论 -
android 图片压缩
Android中最占内存的肯定是图片资源了,使用大图很容易造成OOM,就算是小图,使用不当也会造成很大的资源浪费。有一点需要明确一下,图片最终占内存跟图片大小本身没什么关系,比如说有一张1k的图片,还有一张1M的图片,两张图片加载到内存中设置的长宽一样,图片质量也一样,那么他们他们占的内存是一样大的。如何计算图片占内存大小呢?图片加载到内存中的长*图片加载到内存中的宽*一个像素点所占内存原创 2016-05-29 21:23:38 · 2142 阅读 · 0 评论 -
Android 毛玻璃效果的实现
Android 毛玻璃效果,主要找到了3中实现方案,1、如果系统的api在16以上,可以使用系统提供的方法直接处理图片 if (Build.VERSION.SDK_INT > 16) { Bitmap bitmap = sentBitmap.copy(sentBitmap.getConfig(), true); final RenderScript rs = RenderScript.原创 2016-05-31 08:05:21 · 2199 阅读 · 0 评论 -
android开发播放声音文件
有两种播放音频形式,第一个:MediaPlayer 类 ;第二个:SoundPool 类MediaPlayer mediaPlayer01;mediaPlayer01 = MediaPlayer.create(YouActivity.this, R.raw.xxxx);mediaPlayer01.start(); 网上有很多介绍mp播放声音文件的几种方式就是:1.用R.ra原创 2016-05-29 15:06:49 · 17745 阅读 · 0 评论 -
Android里Service的bindService()和startService()混合使用深入分析
先讲讲怎么使用bindService()绑定服务应用组件(客户端)可以调用bindService()绑定到一个service.Android系统之后调用service的onBind()方法,它返回一个用来与service交互的IBinder绑定是异步的.bindService()会立即返回,它不会返回IBinder给客户端.要接收IBinder,客户端必须创建一个ServiceConnecti原创 2016-05-30 13:03:36 · 8402 阅读 · 0 评论 -
AndroidManifest详解
一、关于AndroidManifest.xmlAndroidManifest.xml 是每个android程序中必须的文件。它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置。 除了能声明程序中的Activities, ContentProviders, Services, 和Intent原创 2016-05-27 22:22:29 · 6735 阅读 · 0 评论 -
sqlite3中的数据类型
大多数的数据库引擎(到现在据我们所知的除了sqlite的每个sql数据库引擎)都使用静态的、刚性的类型,使用静态类型,数据的类型就由它的容器决定,这个容器是这个指被存放的特定列。Sqlite使用一个更一般的动态类型系统,sqlite中,值的数据类型跟值本身相关,而不是与它的容器相关。Sqlite的动态类型系统和其他数据库的更为一般的静态类型系统相兼容,但同时,sqlite中的动态类型允许它能做原创 2016-05-28 00:27:06 · 13084 阅读 · 1 评论 -
Android - LayoutInflater和inflate方法的用法
在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如 Button、TextView等)。具体作用:1、对于一个没有被载入或者想要动态载入的界面,都需要使用Layo原创 2016-05-28 08:03:59 · 21336 阅读 · 1 评论 -
Filter 过滤器
一、结构 public abstract class Filter extends Object java.lang.Object android.widget.Filter 二、概述 过滤器通过过滤模式来约束数据,通常由实现了Filterable接口的子类来生成。 过滤操作是通过调用 filter(CharSequence) 或者 filter原创 2016-05-28 09:18:19 · 3571 阅读 · 0 评论 -
JNI签名与数据匹配
JNI为了扮演在c/c++和java之间的匹配工作,它首先需要做的就是既要认识java中的数据类型,也要认识c/c++中的数据类型。这 时,jni就相当于一个适配者了。好比,A与C两个人本来不认识,可是现在B认识A,B也认识C,那么通过C的指引和介绍,A和C就认识了!1、原始数据类型的匹配:其中jni中的本地类型都是以j开头,可以在c/c++中直接和c/C++类型互通互换! 2原创 2016-05-28 17:13:44 · 3774 阅读 · 0 评论 -
Android中PopupWindow的使用
01public class PopUpActivity extends Activity { 02 /** Called when the activity is first created. */ 03 @Override 04 pu转载 2015-01-08 09:20:31 · 1708 阅读 · 0 评论 -
android桌面组件开发
Widget是Android1.5版所引进的特性之一.Widget,可让用户在主屏幕界面及时了解程序显示的重要信息.标准的Android系统已包含几个Widget的示例,如模拟时钟,音乐播放器等.1、AppWidget 框架类1、AppWidgetProvider :继承自 BroadcastRecevier , 在AppWidget 应用 update、enable、disabl原创 2014-01-21 09:27:17 · 6329 阅读 · 0 评论 -
TextView文本效果
1、BackgroundColorSpan 背景色 2、ClickableSpan 文本可点击,有点击事件3、ForegroundColorSpan 文本颜色(前景色)4、MaskFilterSpan 修饰效果,如模糊(BlurMaskFilter)、浮雕(EmbossMaskFilter)5、MetricAffectingSpan 父类,一般不用6、RasterizerSpa原创 2016-05-25 18:52:41 · 2055 阅读 · 0 评论 -
Android Home按键的监听与屏蔽方式
在最新的Android系统中是不能直接屏蔽home按键的,但是还是可以监听到home按键这个事件。先说一下最彻底的方法,但是需要系统签名public void blockHomeKey(boolean block) { try { IWindowManager iWindowManager = IWindowManager.Stub. asInterface(Servic原创 2016-05-25 21:02:56 · 4776 阅读 · 0 评论 -
RxJava介绍
RxJava github地址 https://github.com/ReactiveX/RxJavaReactiveX 官网 http://reactivex.io/intro.htmlRxJava 是什么RxJava is a Java VM implementation of Reactive Extensions: a library for composing async原创 2016-05-25 17:50:44 · 2875 阅读 · 0 评论 -
Android自动测试之Monkey工具
一、 什么是MonkeyMonkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。 二、 Monkey的特征1、 测试的对象仅为应用程序包,有一定的局限性。2、 M原创 2016-05-26 20:33:17 · 2784 阅读 · 0 评论 -
Android原生Json解析
android的json解析部分都在包org.json下,主要有以下几个类: JSONObject:可以看作是一个json对象,这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。它对外部(External: 应用toString()方法输出的数值)调用的响应体现为一个标准的字符串(例如:{"JSON": "Hello, World"},最外被原创 2016-05-26 22:31:22 · 4859 阅读 · 0 评论 -
Android H5判断是否安装app和唤起APP
H5中是无法直接判断应用是否安装的,但是可以间接判断。第一种方式,if(...){document.location = '';setTimeout(function(){ //此处如果执行则表示没有app},200);}这里的逻辑很简单,当没有成功打开app的时候新页面不会弹出则页面逻辑可言进行,如果进入了新页面,则页面逻辑便终止了所以我们可以另开一个原创 2016-05-05 18:35:08 · 21908 阅读 · 0 评论