
Android
文章平均质量分 81
BridgeGeorge
脚踏实地,展望未来
展开
-
Android ImageView&ImageButton 显示图片的一些总结
首先设置布局中的imageView如下ImageView android:id="@+id/imge2" android:layout_width="match_parent" android:layout_height="wrap_content" android:contentDescription="测试2" />原创 2017-09-11 18:19:21 · 5378 阅读 · 0 评论 -
Android HandlerThread使用及原理分析
##子线程的消息循环很明显的一点就是,我们要在子线程中调用Looper.prepare() 为一个线程开启一个消息循环,默认情况下Android中新诞生的线程是没有开启消息循环的。(主线程除外,主线程系统会自动为其创建Looper对象,开启消息循环。) Looper对象通过MessageQueue来存放消息和事件。一个线程只能有一个Looper,对应一个MessageQueue。 然后通过Looper.loop()原创 2017-05-05 16:04:59 · 448 阅读 · 0 评论 -
Android View滑动的方法总结
layout()如果你将滑动后的目标位置的坐标传递给layout(),这样子就会把view的位置给重新布置了一下,在视觉上就是view的一个滑动的效果。public class DragView extends View{ private int lastX; private int lastY; public DragView(Context context, AttributeSet原创 2017-09-21 16:13:10 · 523 阅读 · 0 评论 -
Android IntentService使用及原理分析
##IntentService 介绍IntentService是一种特殊的service,它继承了Service并且它是一个抽象类,因此必须创建它的子类才能使用IntentService.IntentService可用于执行后台耗时任务,当任务执行后它会自动停止,同时由于IntentService是服务的原因,这导致它的优先级比单纯的线程要高得多,所以IntentService比较适合执行一些高优先级的后台任务,原创 2017-05-05 16:05:52 · 728 阅读 · 0 评论 -
Android 系统启动过程简析
Android手机开机执行过程图:这里写图片描述 从开机到桌面的过程为:Bootloader ➪Kernel ➪Init进程 ➪ Zygote ➪ SystemServer ➪ ServiceManager ➪ Home Launcher Android服务包括系统服务和应用服务,系统服务是指Android系统在启动过程就已经启动实现了的服务,对于系统服务又分为Java服务原创 2022-01-13 15:56:02 · 352 阅读 · 0 评论 -
Android 类加载机制
类加载器ClassLoader早期使用过Eclipse等Java编写的软件的同学可能比较熟悉,Eclipse可以加载许多第三方的插件(或者叫扩展),这就是动态加载。这些插件大多是一些Jar包,而使用插件其实就是动态加载Jar包里的Class进行工作。这其实非常好理解,Java代码都是写在Class里面的,程序运行在虚拟机上时,虚拟机需要把需要的Class加载进来才能创建实例对象并工作,而完成这原创 2017-06-16 09:17:15 · 860 阅读 · 0 评论 -
Android Loader异步加载器解析
Loader介绍 Loader 是Android 3.0开始引入的一个异步数据加载框架,它使得在Activity或者Fragment 中异步加载数据变得简单,同时它在数据源发生变化时,能够及时发出消息通知。Loader框架涉及的API主要如下。Loader: 加载器框架的基类,封装了实现异步数据加载的接口,当一个加载器被激活后,它就会开始监视数据源并在数据发生改变时发送新的结果。AsyncTask原创 2017-05-19 18:47:24 · 510 阅读 · 0 评论 -
Android 性能优化——解决应用启动白屏/黑屏问题
项目中遇到从桌面 launcher 的小图标冷启动 App 时会经常碰到白屏/黑屏的问题,大约几百毫秒,然后才会跳转到我们应用程序的第一个 Activity, 为什么会出现这种情况?原因当从桌面 Launcher 的小图标点击冷启动一个 App 的时候,程序需要进行一些基本的初始化操作,例如在Application 或者MainActivty中做了很多耗时操作,例如初始化第三方SDK等,当手机性能不好,配原创 2017-05-19 15:53:25 · 2425 阅读 · 1 评论 -
Android URL Scheme协议使用
定义android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面等。URL Scheme应用场景客户端应用可以向操作系统注册一个 URL scheme,该 scheme 用于从浏览原创 2017-05-18 18:16:59 · 859 阅读 · 0 评论 -
Android 关于文件存储路径的总结
关于Android中几个常用文件路径的介绍Android 使用与其他平台上基于磁盘的文件系统类似的文件系统。 本课程讲述如何使用 Android 文件系统通过 File API 读取和写入文件。File 对象适合按照从开始到结束的顺序不跳过地读取或写入大量数据。 例如,它适合于图片文件或通过网络交换的任何内容。本课程展示如何在您的应用中执行基本的文件相关任务。本课程假定您熟悉 Linu原创 2017-04-26 18:42:57 · 934 阅读 · 0 评论 -
Android性能优化——局部更新ListView item
对于ListView数据的刷新大家都知道,改变Adapter的数据源,然后调用Adapter的notifyDateSetChanged()方法即可。通过本篇文章给大家详细介绍Android开发之ListView实现Item局部刷新,感兴趣的朋友一起学习吧 对于android中的ListView刷新机制,大多数的程序员都是很熟悉的,修改或者添加adapter中的数据源之后,然后调用notifyDa原创 2017-04-26 11:03:49 · 603 阅读 · 0 评论 -
Android 消息循环机制的重要问题和知识点总结
介绍MessageQueue消息队列在Android中指的是MessageQueue,MessageQueue主要包含两个操作:插入和读取。读取操作本身会伴随着删除操作,插入和读取对应的方法分别为enqueueMessage和next,其中enquene的作用是往消息队列中插入一条消息,而next的作用是从消息队列中取出一条消息并将其从消息队列中移除。特别需要注意的是:尽管Mess原创 2017-04-26 10:43:52 · 554 阅读 · 0 评论 -
Android 性能优化——避免过度绘制
什么是过度绘制(OverDraw)在多层次重叠的UI结构里面,如果不可见的UI也在做绘制的操作,会导致某些像素区域被绘制了多次。这样就会浪费大量的CPU以及GPU资源。过度绘制最直观的影响就是会导致APP卡顿。还好系统有提供GPU过度绘制调试工具会在屏幕上用不同的颜色,来表明一个像素点位被重复绘制的次数。怎样开启GPU过度绘制调试工具?1.点击进入“设置”; 2.点击进入“开发者选项” 3.选中原创 2017-05-16 20:02:00 · 1483 阅读 · 0 评论 -
Android性能优化——优化viewPager
当ViewPager切换到当前的Fragment时,Fragment会加载布局并显示内容,如果用户这时快速切换ViewPager,即Fragment需要加载UI内容,而又频繁地切换Fragment,就容易产生卡顿现象(类似在ListView快速滑动的同时加载图片容易卡顿)。1.Fragment轻量化如果ViewPager加载的Fragment都比较轻量,适当精简Fragment的布局,原创 2017-09-11 18:27:44 · 1625 阅读 · 0 评论 -
Android FragmentPagerAdapter与FragmentStatePagerAdapter
FragmentPagerAdapter是Android-support-v4支持包里面出现的一个新的适配器,继承自PagerAdapter,是专门用来给支持包中出现的ViewPager进行数据适配的。PagerAdapter在之前的文章中进行过简单的介绍,不记得怎么使用的可以先去看一下。FragmentPagerAdapter,见名知意,这个适配器就是用来实现Fragment在ViewP原创 2017-09-11 18:53:04 · 637 阅读 · 0 评论 -
自定义View-- 绘制一个表盘
自定义View-- 绘制一个表盘看到一加OS 上的表盘不错,所以仿写一个同时复习一下自定义View的内容。分析表盘结构一个圆形白色表盘,12个刻度点,3个指针,一个中心点,一个当前时间指示点。采用何种绘制方案很简单,直接覆写onDraw 方法 ,在canvas 上绘制内容即可,都是最基本的canvas API 绘制操作,绘制过程都是基本的API调用。画线 public void...原创 2019-07-27 19:00:41 · 766 阅读 · 0 评论 -
Android跨进程传输超大bitmap的实现
需求背景项目中有个需求是这样的,在主进程Activity 中选择或者编辑一张背景图产生一个bitmap 对象,要传递给 B进程(推流进程)作为推流引擎的背景图,这个bitmap 有可能比较大,因为要尽量保证清晰度,所以这个bitmap还有可能比较大,所以必然会涉及到跨进程传输大型bitmap 的问题。有哪些方案跨进程传递大图,我们能想到哪些方案呢?文件写入磁盘最容易想到的方案就是先给图片...原创 2019-07-29 21:29:13 · 12985 阅读 · 16 评论 -
深入理解 Android 组件的 exported 属性
Activity的exported属性在单个App可能用得比较少,但对于对外接口的Activity或公司内部多个应用间接口调用的设计会有比较大的影响。本文基于android 6.0.1的源码谈谈Activity的exported属性,内容分为2部分:来自官方文档的描述下面来详细的了解一下四大组件中的这个属性:1、先来看:Activity中的:<activity …...原创 2019-07-10 21:06:48 · 14420 阅读 · 1 评论 -
Android性能优化——合理进行内存管理
原文链接 https://developer.android.com/topic/performance/memory-overview https://developer.android.com/topic/performance/memory内存管理概述Android运行时(ART)和Dalvik虚拟机使用分页和内存映射(映射)来管理内存。这意味着应用程序的任何内存操作(无论...翻译 2018-06-01 20:44:47 · 2023 阅读 · 0 评论 -
Android 性能优化——通过线程提高性能
通过线程提高性能在Android开发中学会熟练使用线程可以帮助你提高应用程序的性能。本文将从以下几个方面讨论了线程使用:使用UI或主线程;应用程序生命周期与线程优先级之间的关系;Android平台提供的帮助你管理线程复杂性的方法。每个部分都向你描述了潜在的陷阱和避免它们的策略。主线程当用户启动你的应用程序时,Android会创建一个新的Linux进程以及一个执行线程。这个主线程也称...翻译 2018-06-01 20:39:27 · 2439 阅读 · 0 评论 -
深入RecyclerView(一)
原文链接:https://developer.android.com/guide/topics/ui/layout/recyclerview用RecyclerView来创建列表视图如果你的应用需要显示一个滚动的列表视图,并且这个列表包含了大量数据(或一些频繁更改的数据,则可以按照本篇文章的指引来使用RecyclerView。如果你想创建一个卡片列表,如图2 所示,你也可以使用Car...翻译 2018-06-11 18:06:36 · 1664 阅读 · 0 评论 -
Ubuntu 14.04编译Android 2.3.7源代码记录
编译环境机型 MacBook Pro 2015款 8G+256G SSD虚拟机 下安装操作系统 Ubuntu 14.04 LTS 64位(可以通过http://mirrors.163.com/ubuntu-releases/)Android 2.3.7 r1 jdk 1.6 下载地址 https://pan.baidu.com/s/1gDr5lwgGzyZ533Bro7jkkA...原创 2018-05-28 13:16:48 · 1194 阅读 · 0 评论 -
Android性能优化——优化应用启动时间
优化应用启动时间用户希望App能够快速相应和加载,应用启动缓慢会带来糟糕的用户体验,导致用户恶评,甚至会卸载你的应用。这篇文章提供的信息能够帮助你优化应用的启动时间。首先,我们先来了解应用启动的内部原理,接下来,我们会讨论如何分析启动性能。最后,最后我们会介绍一些影响启动性能的常见问题,并会给出相应的解决办法。应用启动原理应用启动可以分为三种类型,冷启动,暖启动,热启动,每种类...翻译 2018-05-20 16:46:45 · 8948 阅读 · 0 评论 -
Android性能优化—— Apk瘦身的实现
为了能够减小APK的大小,首先需要知道APK由哪些部分构成,然后针对每个部分做相应的优化工作,下图是一个APK解压后的文件结构:原创 2017-05-16 19:21:58 · 872 阅读 · 0 评论 -
Android 本地广播LocalBroadcastManager原理分析
LocalBroadcastManager是Android Support包提供了一个工具,是用来在同一个应用内的不同组件间发送Broadcast的。原创 2017-05-05 14:48:38 · 2462 阅读 · 0 评论 -
Android 资源匹配过程详解
针对大多数APK应用程序,开发人员都会提供各种不同的资源。比如对于同一张图片image.png,我们通常会提供高分辨率,中分辨率和低分辨率三个版本。res/ drawable/ image.png drawable-hdpi/ image.png drawable-mdpi/ image.png原创 2016-09-28 02:10:32 · 3118 阅读 · 0 评论 -
Android APK打包流程详解
在日常开发过程中,由于IDE提供了良好的可视化操作和便捷的打包签名流程,所以很多人对APK是如何打包的并不十分了解。作为一个有追求的程序猿,我们并不满足只会点点按钮,按部就班。理解apk的打包流程有助于我们加深Android 应用从开发到部署的整个生命周期过程的掌握,也会对Android开发有自己更清晰透彻的认识,本篇着重于介绍这一流程。Android APK内容介绍以apk为后缀的文件是Andro原创 2016-09-26 11:23:00 · 2777 阅读 · 0 评论 -
Android AsyncTask源码分析
AsyncTask封装了线程池和Handler。简化了异步任务的开发。原创 2016-09-07 16:23:41 · 685 阅读 · 0 评论 -
Android ANR 与FC 异常总结
ANR(Activity Not Respone)(无响应)先介绍下Main线程(也称为UI线程、主线程) 功能 1. 创建UI控件 , 2. 更新UI控件状态 3. 事件处理 限制 Main线程不建议有超过5秒的事件 出现条件 1. 当用户输转载 2016-02-24 00:32:04 · 3034 阅读 · 0 评论 -
Android 常用辅助工具类Utils总结
Android 项目中常常会用一些辅助工具类,便于我们在开发中使用。下面做一下总结。1、日志工具类L.java[java] view plain copy 在CODE上查看代码片派生到我的代码片 import android.util.Log; /** * Log统一管理类 */ public class L {转载 2016-08-04 17:22:41 · 1846 阅读 · 0 评论 -
Android ListView 弹性滚动简单实现
通常情况下,Android默认的ListView 在滚动到顶端或底端的时候,并没有很好的提示。在IOS系统的交互中,列表是有弹性的,当列表滑动到顶部或者底部时会继续往上或者往下滑动一段距离。但是在Android系统中,Google并没有赋予listview这种良好的交互效果,仅在Android 5.X版本的系统中,给这种行为添加了一个半月型的波纹阴影。搜了一下网上的解决方案,基本上都是通过重写原创 2016-07-19 23:06:18 · 1324 阅读 · 0 评论 -
字符编码详解——彻底理解掌握编码知识,“乱码”不复存在
文章出处 http://polaris.blog.51cto.com/1146394/377468每一个程序员都不可避免的遇到字符编码的问题,特别是做Web开发的程序员,“乱码问题”一直是让人头疼的问题,也许您已经很少遇到“乱码”问题,然而,对解决乱码的方法的内在原理,您是否明白?本人作为一个程序员,在字符编码方面同样遇到不少问题,而且一直对各种编码懵懵懂懂、不清不楚;在工作中也曾经遇到一个很烦人的转载 2016-07-25 16:42:58 · 885 阅读 · 0 评论 -
LiteNote v1.0开发文档
LiteNote v1.0开发文档 主题 基础功能点 应用设置及管理 widget桌面小部件 印象笔记同步添加笔记功能描述:添加新笔记内容至LiteNote。 操作逻辑:用户主界面点击添加按钮,进入发布界面,自动弹出输入法,输入笔记内容后,点击返回操作,执行数据保存,并在主页面列表更新笔记,如果内容为空,不做保存操作,不更新主页笔记列表。 说明:内容和长度不做校验。编辑笔记功能描述:对原创 2016-01-25 01:14:52 · 814 阅读 · 0 评论 -
Android APK签名机制分析
Android 签名介绍所有的Android应用程序要想在设备上安装,必须经过签名,不管是Debug版本还是Release版本。下面分别介绍这两种模式。Debug模式这个模式的签名过程由系统自动完成。因为采用默认的keystore,用户不需要特地输入密码等信息。签名所用工具Keytool和Jarsinger均由JDK提供,因此需要保证JAVA_HOME环境变量的正确性。 默认条件下,系统会存放原创 2016-09-28 21:08:45 · 1330 阅读 · 0 评论 -
Android 退出终止APP的方法总结
1. Dalvik VM的本地方法System.exit(0); //常规Java、c#的标准退出法,返回值为0代表正常退出2. 任务管理器方法首先要说明该方法运行在Android 1.5 API Level为3以上才可以,同时需要权限ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVI原创 2017-05-12 20:01:25 · 5413 阅读 · 0 评论 -
Android 状态保存与恢复流程 完全解析
Activity的方法onSaveInstanceState(Bundle outState),按照文档里说的,这个方法是在内存不够时,系统要强制杀掉这个Activity时,进行调用的。但经过我的测试,发现这个方法并不是在系统内存不够时,要杀掉Activity时,才调用的。测试结果:只要Activity不finish,Activity进入后台(比如Home键,跳转到其他的Activi转载 2017-05-23 15:49:01 · 668 阅读 · 0 评论 -
Android Bundle总结
Bundle 介绍官方文档对Bundle的说明如下: A mapping from String values to various Parcelable types.官方意为Bundle封装了String值到各种Parcelable类型数据的映射,可见跟我们上述理解是吻合的。Bundle源码分析知道了Bundle的主要作用,再来看源码就容易理解了。Bundle位于android.os包中,是原创 2017-05-23 15:42:07 · 6503 阅读 · 3 评论 -
Android 性能优化——使用优化集合类SparseArray&ArrayMap
SparseArray SparseArray比HashMap更省内存,在某些条件下性能更好,主要是因为它避免了对key的自动装箱(int转为Integer类型),它内部则是通过两个数组来进行数据存储的,一个存储key,另外一个存储value,为了优化性能,它内部对数据还采取了压缩的方式来表示稀疏数组的数据,从而节约内存空间,我们从源码中可以看到key和value分别是用数组表示:原创 2017-05-02 16:21:47 · 1478 阅读 · 0 评论 -
Android 性能优化——TypedArray 调用recycle()回收对象
在 Android 自定义 View 的时候,需要使用 TypedArray 来获取 XML layout 中的属性值,使用完之后,需要调用 recyle() 方法将 TypedArray 回收。那么问题来了,这个TypedArray是个什么东西?为什么需要回收呢?TypedArray并没有占用IO,线程,它仅仅是一个变量而已,为什么需要 recycle? 为了解开这个谜,首先去找官网的原创 2016-12-19 19:18:48 · 6091 阅读 · 1 评论 -
Android 自定义View之消息提示控件
介绍在IOS系统当中,对于新消息的提醒,提示经常会见到带数字的红色圆圈数字通知。如下所示: 这种效果得到了IOS原生支持,但是在Android 上就比较悲剧了,需要开发者自己实现。当然借助于开源的力量,目前已经有了较好的解决方案,传送门->BadgeView.这个控件使用起来也比较简单,只需简单几个步骤,便可以在任意控件上的边角加上数字角标效果。设计思路显示数字 为了实现角标提示效果,无疑需要我原创 2016-12-13 16:50:28 · 1998 阅读 · 0 评论