
android开发
文章平均质量分 83
Big Skipper
The Chosen One.
展开
-
PorterDuff.Mode详解
做过图形图像处理coding的Android程序员一定用过或了解过PorterDuff.Mode这个枚举变量中的某些值,对此了解不多理解不深刻的时候是不是会很纠结到底该用那个模式呢?至少不能快速准确地用到恰当的模式,那么PorterDuff.Mode究竟是什么,它的各个枚举值有什么作用呢?这里我整理一下笔记,加深理解。PorterDuff.Mode是什么public Xfermode s...转载 2018-12-17 19:27:12 · 5017 阅读 · 0 评论 -
深入理解layout_weight属性
前言 Android中layout_weight这个属性对于经常捣鼓UI的我们来说,肯定不会陌生。但是我们在真正使用这个属性时,经常会出现一些莫名奇妙的布局效果;如果仅仅知其然而不知其所以然,一些意外的布局效果一定让我们颇为头疼。在本文中,将对layout_weight这个属性详细剖析。正文从代码讲起<LinearLayout xmlns:android="http://...转载 2019-01-23 17:40:41 · 3461 阅读 · 0 评论 -
用户手势检测-GestureDetector使用详解
一、概述当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等。一般情况下,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouch(View v, MotionEvent event)方法,我们可以处理一些touch事件,但是这个方法太过简单,如果需要处理一些复杂的手势,用这个接口就会很麻烦(因为我们要自己根转载 2017-11-26 23:18:28 · 231 阅读 · 0 评论 -
解决webview加载网页出现白屏的问题
最近在使用WebView进行网页内容显示时,如果网络很慢,例如2G网络,加载网页会需要很长时间,在加载过程中,WebView一直显示白屏,体验不是很好。经过修改可以使用以下几个方案解决WebView加载过程中,出现白屏的问题。1,修改WebView的背景,修改颜色值或者添加一个加载中的图片 webView.setBackgroundResource(R.drawable.bgblack); 如果转载 2016-12-29 16:11:58 · 7425 阅读 · 0 评论 -
Android UI组件之RecycleView
为什么提出来RecycleView?RecyclerView提供了一种插拔式的体验,高度解耦,使用灵活。RecyclerView只管回收与复用View,通过设置LayoutManager,ItemDecoration , ItemAnimator实现各种特效,达到自由定制的目的,如实现ListView、GridView、瀑布流效果等。有什么特点,适用场景?优点:标准化了ViewHolder,编写Adapter面向的是ViewHolder而不再是View了,复用的逻辑被封装了,写起来更加简单。设置布原创 2021-03-24 23:19:59 · 574 阅读 · 0 评论 -
简述 Android和H5交互
1 — WebView基本配置2 —WebView和H5的交互3 — WebView错误页面处理4 —WebView中的Cookie操作5 —WebView漏洞6 —WebView内存泄漏问题1WebView基本配置布局设置 代码设置LinearLayout xmlns:android="http://schemas.android.com/apk/res转载 2017-09-26 22:11:00 · 356 阅读 · 0 评论 -
Android 8.0 SystemUI消息列表图标显示问题
Google为了统一风格,对消息列表的图标做了统一处理,设置消息icon的时候不能随便用一张带有色彩的图片,只能使用白色和透明两个颜色,具体设置代码位置在frameworks/base/core/java/android/app/Notification.java类中的processSmallIconColor()中private void processSmallIconColor(Ico...原创 2018-12-17 19:48:51 · 772 阅读 · 0 评论 -
android FgThread线程
几个关键属性private static FgThread sInstance FgThread对象private static Handler sHandler handler对象,用来处理消息private static HandlerExecutor sHandlerExecutor 用来执行任务ServiceThread类继承自HandlerThread,是一个拥有属于线程自己的Looper对象没有对外提供构造方法,私有的构造方法里面,设置了线程名为android.fg}.}.}原创 2022-09-06 23:29:51 · 1427 阅读 · 0 评论 -
Android 面试汇总
一 Java 相关容器相关:HashMap,ArrayMap,LinkedList,ArrayList,数组,等等内存模型垃圾回收算法(JVM)垃圾回收机制和调用 System.gc()的区别?类加载过程(需要多看看,重在理解,对于热修复和插件化比较重要)反射多线程和线程池设计模式(六大基本原则、项目中常用的设计模式、手写单例等)Java 四大引用Java 的泛型final、finally、finalize 的区别接口、抽象类的区别二 Android 相关自定义 View事件原创 2021-08-01 23:41:17 · 847 阅读 · 5 评论 -
Android 新的流畅体验,90Hz 漫谈
一 概述PC 上高刷新率屏幕很早就出来了,但是 Android 上高刷新率屏幕出现在 Android 手机上还只是这两年的事情,尽管雷蛇去年就推出了 120Hz 屏幕的手机,但是反响平平;而个人认为今年努比亚的红魔 3 和 OnePlus 的 7 Pro 推出的 90Hz 的屏幕才是 Android 手机目前这个阶段最好的选择,也是目前能显著提升用户体验的一个点。对高刷新率屏幕没啥概念的,可以去苹果体验店体验一下 120Hz 刷新率的 iPad Pro。二 技术术语说明2.1 什么是屏幕刷新率 ?首原创 2021-08-02 23:06:41 · 1224 阅读 · 0 评论 -
ArrayMap 原理
一 概述在移动设备端内存资源很珍贵,HashMap为实现快速查询带来了很大内存的浪费。为此,2013年5月20日Google工程师Dianne Hackborn在Android系统源码中新增ArrayMap类,从Android源码中发现有不少提交专门把之前使用HashMap的地方改用ArrayMap,不仅如此,大量的应用开发者中广为使用。然后,你是否研究过这么广泛使用的基础数据结构存在缺陷?要回答这个问题,需要先从源码角度来理解ArrayMap的原理。ArrayMap是Android专门针对内存优化而原创 2021-07-18 23:20:17 · 1251 阅读 · 2 评论 -
Android 系统时间计算
一 概述:Android 开发中经常会遇到计算时间间隔的场景,Android 系统中提供了几种计算时间的方法:System.currentTimeMillis()、SystemClock.uptimeMillis() 和 SystemClock.elapsedRealtime()。那么他们之间有什么区别呢?使用的时候会遇到什么样的“坑”呢?今天梳理一下。Android 系统提供了三种不同的可用时钟:System.currentTimeMillis()SystemClock.uptimeMilli原创 2021-06-25 14:44:00 · 1954 阅读 · 0 评论 -
Android 热修复原理
一 概述在 Android 应用开发中,热修复技术被越来越多的开发者所使用,也出现了很多热修复框架,比如:AndFix、Tinker、Dexposed 和 Nuwa 等等。如果只是会这些热修复框架的使用那意义并不大,我们还需要了解它们的原理,这样不管热修复框架如何变化,只要基本原理不变,我们就可以很快的掌握它们。二 什么是热修复正常开发流程热修复开发流程热修复优势修复什么?三 热修复框架分类现状:百花齐放百家争鸣简单分类更合理的分类四 技术原理及特点4.1 阿里Dexp原创 2021-05-04 22:22:38 · 202 阅读 · 0 评论 -
理解PendingIntent
一 概述在 Android 中,我们常常使用 PendingIntent 来表达一种“留待日后处理”的意思。从这个角度来说,PendingIntent 可以被理解为一种特殊的异步处理机制。不过,单就命名而言,PendingIntent 其实具有一定误导性,因为它既不继承于 Intent,也不包含 Intent,它被设计出来的核心理念可以粗略地汇总成四个字——“异步激发”。很明显,这种异步激发常常是要跨进程执行的。比如说 A 进程作为发起端,它可以从系统“获取”一个 PendingIntent,然后 A原创 2021-04-14 18:34:44 · 1424 阅读 · 0 评论 -
Android消息机制常见问题汇总
Android 消息机制作用和使用场景Android 消息机制主要用来进行线程间通信,常见的使用场景有:跨进程之后的界面消息处理比如 Activity 的启动,就是 AMS 在进行进程间通信的时候,通过 Binder 线程将消息发送给 ApplicationThread 的消息处理者 Handler,然后再将消息分发给主线程中去执行。网络交互后切换到主线程进行 UI 更新当子线程网络操作之后,需要切换到主线程进行 UI 更新。总之一句话,消息机制的存在就是为了解决线程间的通信问题。子线原创 2021-04-12 17:35:50 · 382 阅读 · 0 评论 -
Android多线程之IntentService详解
一 概述IntentService 是继承自 Service 并处理异步请求的一个类,在 IntentService 内有一个工作线程来处理耗时操作,其优先级比普通 Service 高。当任务完成后,IntentService 会自动停止,而不需要手动调用 stopSelf()。另外,可以多次启动 IntentService,每个耗时操作都会以工作队列的方式在 IntentService 中 onHandleIntent() 回调方法中执行,并且每次只会执行一个工作线程,因此我们直接实现虚函数 onHan原创 2021-04-11 17:27:12 · 554 阅读 · 0 评论 -
Android多线程之HandlerThread详解
一 HandlerThread介绍当系统中有多个耗时任务需要执行时,每个任务都会开启一个新线程去执行耗时任务,这样会导致系统多次创建和销毁线程,从而影响性能。为了解决这一问题,Android 提供了 HandlerThread,HandlerThread 是在线程中创建一个 Looper 循环器,让 Looper 轮询消息队列,当有耗时任务进入队列时,则不需要开启新线程,在原有的线程中执行耗时任务即可,否则线程阻塞。二 工作原理HandlerThread 继承 Thread,在 Thread 开始执原创 2021-04-11 15:47:01 · 919 阅读 · 0 评论 -
Android View 实现View滑动的六种方法
一 View的滑动简介View的滑动是Android实现自定义控件的基础,同时在开发中我们也难免会遇到View的滑动的处理。其实不管是那种滑动的方式基本思想都是类似的:当触摸事件传到View时,系统记下触摸点的坐标,手指移动时系统记下移动后的触摸的坐标并算出偏移量,并通过偏移量来修改View的坐标。实现View滑动有很多种方法,这篇文章主要讲解六种滑动的方法,分别是:layout()、offsetLeftAndRight()与offsetTopAndBottom()、LayoutParams、动画、sc原创 2021-03-30 23:27:08 · 2597 阅读 · 0 评论 -
Android View 视图坐标系
一 概述Android View 体系是界面编程的核心,他的重要性不亚于 Android 四大组件,在这个系列中我会陆续讲到 View 坐标系、View 的滑动、View 的事件分发等文章来逐步介绍 Android View 体系。二 View简介View 是 Android 所有控件的基类,同时 ViewGroup 也是继承自 View,看下面这张图我们就会有一个直观的了解:知道了 View 的层级关系有助于对 View 的理解,从上图可以发现我们常用的这些控件都是继承于 View,如果我们更好原创 2021-03-30 13:42:38 · 327 阅读 · 0 评论 -
Android多进程 android:process 属性
一 概述正常情况下,一个apk启动后只会运行在一个进程中,其进程名为apk的包名,所有的组件都会在这个进程中运行,以下为DDMS的进程截屏:com.biyou.multiprocess 为进程名,也是 apk 的包名,但是如果需要将某些组件(如Service,Activity等)运行在单独的进程中,就需要用到android:process属性了。我们可以给android的组件设置android:process属性来使其运行在指定的进程中。AndroidMantifest.xml中的activit原创 2021-03-06 01:06:30 · 1146 阅读 · 0 评论 -
Handler的runWithScissors()方法详解
一 概述在研究 WMS 启动的时候看到了如下代码:public static WindowManagerService main(final Context context, final InputManagerService im, final boolean showBootMsgs, final boolean onlyCore, WindowManagerPolicy policy, ActivityTaskManagerService atm, TransactionF原创 2021-02-19 12:29:58 · 1375 阅读 · 0 评论 -
android中的坐标系以及获取坐标的方法
android中有两种坐标系,分别称之为Android坐标系和视图坐标系。而对应的也有一些相关的方法可以获取坐标系中的坐标值。只有搞清楚这些区别,才能在实现的时候不至于出错或者得不到你想要的效果。一、Android坐标系和视图坐标系 (1)Android坐标系 先来看一看Android坐标系是个什么样子的。贴一张图来说明,如下: 如上图所示,Android坐标系以手机屏幕左上角的顶点为坐标原点,从该点向右为x轴正方向,从该点向下为y轴正方向。而触...转载 2020-05-10 11:32:00 · 1018 阅读 · 0 评论 -
Android View的绘制流程
View的绘制和事件处理是两个重要的主题,上一篇《图解 Android事件分发机制》已经把事件的分发机制讲得比较详细了,这一篇是针对View的绘制,View的绘制如果你有所了解,基本分为measure、layout、draw 过程,其中比较难理解就是measure过程,所以本篇文章大幅笔地分析measure过程,相对讲得比较详细,文章也比较长,如果你对View的绘制还不是很懂,对measure过程转载 2017-10-16 13:45:28 · 216 阅读 · 0 评论 -
图解 Android 事件分发机制
在Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟悉整套的分发机制有助于更好的分析各种点击滑动失效问题,更好去扩展控件的事件功能和开发自定义控件,同时事件分发机制也是Android面试必问考点之一,如果你能把下面的一些事件分发图当场画出来肯定加分不少。废话不多说,总结一句:事件分发机制很重要。Android 事件分发流关于Android 事件分发机制网上的原创 2017-10-15 22:49:04 · 250 阅读 · 0 评论 -
Android架构设计---关于MVVM模式的探讨
一、MVP模式优缺点在说MVVM之前,简单回顾一下MVP分层,MVP总共分成三层: - a 、View: 视图层,对应xml文件与Activity/Fragment; - b 、Presenter: 逻辑控制层,同时持有View和Model对象; - c 、Model: 实体层,负责获取实体数据。MVP模式有其很大的优点1.解耦合,业务逻辑和视图分离;2转载 2017-10-13 23:33:03 · 236 阅读 · 0 评论 -
android service介绍
很简单一个例子:Android开发中,当需要创建在后台运行的程序的时候,就要使用到Service。Service 可以分为有无限生命和有限生命两种。特别需要注意的是Service跟Activities是不同的(简单来说可以理解为后台与前台的区别),例如,如果需要使用Service的话,需要调用startService(),从而利用startService()去调用Service中的OnCrea转载 2011-12-29 02:59:01 · 369 阅读 · 0 评论 -
Camera APP层分析之对camera framework层封装解析
Android4.4版本的camera和4.0版本的设计差距还是很大的,4.0版本以前的camera在是camera 主activity中直接调用camera hal层的的接口(如android.hardware.camera.open(), android.hardware.camera.setPreviewDisplay(),android.hardware.camera..startPrev转载 2017-11-06 22:53:24 · 1321 阅读 · 0 评论 -
android matrix 详解
1 概述这里我们会详细讲解matrix的各个方法,以及它的用法。matrix叫做矩阵,在前面讲解 ColorFilter 的文章中,我们讲解了ColorMatrix,他是一个4*5的矩阵。而这里,我们讲解的Matrix不是用于处理颜色的,而是处理图形的。他是一个3*3的矩阵。2 原理先看看matrix的矩阵是什么样子的:这里可以查看Matrix的代码得到。那么这个矩阵分别代转载 2017-11-20 21:18:16 · 297 阅读 · 0 评论 -
LayoutInflater中inflate方法详解
关于inflate参数问题,我想很多人多多少少都了解一点,网上也有很多关于这方面介绍的文章,但是枯燥的理论或者翻译让很多小伙伴看完之后还是一脸懵逼,so,我今天想通过三个案例来让小伙伴彻底的搞清楚这个东东。本篇博客我们不讲源码,只看使用。源码的解读会在下一篇博文中带来。inflate方法从大范围来看,分两种,三个参数的构造方法和两个参数的构造方法。在这两类中又有细分,OK,那我们就把各种情况都转载 2017-11-06 20:57:49 · 347 阅读 · 0 评论 -
Android Support Library的前世今生
在之前的开发经历中经常需要导入一些如v4、v7、v13等Android官方的支持包,遇到这些情况时都是网上搜索一下,按照前人给的示例添加依赖。这么稀里糊涂的使用后代码正常运行了,但心中不免会有一些疑问,如,Android官方为什么要提供支持包,都提供哪些支持包,这些支持包又提供了什么特性,开发者又应该如何选择使用这些支持包?(本文出处 @都有米:http://www.jianshu.com/p/转载 2017-10-28 20:30:05 · 208 阅读 · 0 评论 -
Android视图框架Activity,Window,View,ViewRootImpl理解
关于Activity,Window,View的关系一直有个模糊的印象,看别人的分析一般都这么理解Activity是管理Window,Window用来承载View,View是最终的视图,也有说Window的作用可有可无的,作用并不大的,并不是说这些观点有问题,而是看了这么多后,会更迷惑,管理是怎么管理的,承载是怎么实现的,如果不自己根据源码看一些,这些概念会一直是抽象的,遇到问题还是没法理解, 例如转载 2017-10-17 17:58:25 · 521 阅读 · 0 评论 -
Zygote启动主要函数
Zygote的启动过程解析。Zygote实际上是一个用户态应用程序,由启动脚本负责启动。在启动脚本中Zygote叫做app_process。下面分析app_main.cpp中的启动Zygote的过程。main |__设置runtime的mParentDir为/usr/bin,mArgC为zygote参数个数,mArgV为zygote参数(-Xzygote /sys转载 2013-11-21 16:42:39 · 659 阅读 · 0 评论 -
Android中BindService方式使用的理解
最近学习了一下Android里面的Service的应用,在BindService部分小卡了一下,主要是开始没有彻底理解为什么要这么实现。BindService和Started Service都是Service,有什么地方不一样呢:1. Started Service中使用StartService()方法来进行方法的调用,调用者和服务之间没有联系,即使调用者退出了,服务依然在进行【o转载 2013-11-07 11:09:05 · 758 阅读 · 0 评论 -
Android数据存储(一)文件
首先给大家介绍使用文件如何对数据进行存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。public void save() { try { FileOutputStream outStream=this.openFileOutput("a.txt"转载 2013-11-20 23:19:03 · 756 阅读 · 0 评论 -
Android中 onInterceptTouchEvent, onTouchEvent 理解
onInterceptTouchEvent用于改变事件的传递方向。决定传递方向的是返回值,返回为false时事件会传递给子控件,返回值为true时事件会传递给当前控件的onTouchEvent(),这就是所谓的Intercept(拦截)。[tisa ps:正确的使用方法是,在此方法内仅判断事件是否需要拦截,然后返回。即便需要拦截也应该直接返回true,然后由onTouchEvent方法进行处理转载 2013-05-27 14:31:01 · 586 阅读 · 0 评论 -
Android程序函数 将assets文件夹下的文件复制到手机的sd卡中(包括子文件夹)
最近在做个功能是将asset文件夹下的所有文件(包括子文件)全部拷贝出来到指定目录下。所用的方法无非是用AssetManager。但是这里有个问题是也要讲子文件夹和子文件都要拷贝出来。到网上Google了下,也到baidu搜索了下,发现了很多类似问题。但好像都有问题。显然只能做到将asset直接目录下的文件拷贝出来,但子文件夹拷贝不出来,而且,碰到文件夹,会抛异常。无奈自己只好动手写了个。如下:转载 2012-03-29 01:37:58 · 4904 阅读 · 2 评论 -
android adb push 和 adb install的区别
..platform\system\core\adb\commandline.c中adb push的实现if(!strcmp(argv[0], "push")) {if(argc != 3) return usage();return do_sync_push(argv[1], argv[2], 0 /* no verify APK */);}同样的文件中的函数instal转载 2012-02-10 01:26:35 · 2214 阅读 · 0 评论 -
读取文件指定行
/** * 读取文件指定行。 */public class ReadSelectedLine {// 读取文件指定行。 static void readAppointedLineNumber(File sourceFile, int lineNumber) throws IOException { FileReader in = new F转载 2012-01-13 02:09:15 · 803 阅读 · 0 评论 -
Android监听apk安装、卸载、替换的事件类型
Android监听apk安装、卸载、替换的事件类型如下:android.intent.action.PACKAGE_ADDEDandroid.intent.action.PACKAGE_REMOVEDandroid.intent.action.PACKAGE_REPLACED原创 2011-12-29 02:53:15 · 1745 阅读 · 0 评论 -
Android动态生成UI
android 动态创建布局及关于LayoutParams 解释其实这个LayoutParams类是用于child view(子视图) 向 parent view(父视图)传达自己的意愿的一个东西(孩子想变成什么样向其父亲说明)其实子视图父视图可以简单理解成一个LinearLayout 和 这个LinearLayout里边一个 TextView 的关系 TextView 就转载 2011-12-16 02:36:26 · 5166 阅读 · 0 评论