Android开发
文章平均质量分 72
DroidMind
这个作者很懒,什么都没留下…
展开
-
解决Glide在一个imageview上更换图片时会闪的问题
Glide.with(MainActivity.this).load(str[msg.what-1]).dontAnimate().placeholder(iv.getDrawable())原理:1、使用dontAnimate取消图片切换动画2、使用placeholder将之前的图片作为占位,这样切换的过程就是顺滑的...原创 2020-06-17 09:21:05 · 2499 阅读 · 1 评论 -
HandlerThread与IntentService原理解析
前面我们讲到了Looper和Handler,只是为了写这篇文章做铺垫,其实在前面的使用中,我们已经可以感觉到了一些局限性,我们怎样来自己写两个线程是它们直接进行通信呢?在看这篇文章之前,可以先看看Looper与Handler解析这篇文章。 实现通信也很简单,只是要使用Handler的另一个构造函数,在Handler中有另一个比较有用的构造函数:Handler(Looper looper),这样自己原创 2015-07-25 20:34:10 · 1142 阅读 · 0 评论 -
Looper与Handler解析
写这篇文章的目的并不仅仅是为了将Looper和Handler,一方面是为后面其他相关的介绍做铺垫,另一方面是这个东西比较重要,自己也想认真的梳理一下,也想提醒一下大家,虽然关于这个的介绍网上已经有很多。大家通常都会使用Handler+Thread组合,在Thread里面执行耗时的操作,然后使用Handler来执行UI的更新操作,但可能根本不知道其中的缘由,或者根本就不知在Handler的背后还有L原创 2015-07-25 16:38:08 · 952 阅读 · 0 评论 -
ViewConfiguration解析
ViewConfiguration这个类主要定义了UI中所使用到的标准常量,像超时、尺寸、距离,如果我们需要得到这些常量的数据,我们就可以通过这个类来获取,具体方法如下: 1、获取ViewConfiguration对象,由于ViewConfiguration的构造方法为私有的,只能通过这个静态方法来获取到该对象。 ViewConfiguration configure = ViewConfigu原创 2015-08-09 14:03:49 · 4312 阅读 · 0 评论 -
Activity中Window对象的创建过程
看过Activity源码的同胞应该知道,Activity就是对Window对象进行了一个包装,里面的很多操作实质是由Window来完成的,但是Window类是一个抽象类,那么Activity里面的Window属性mWindow所引用的肯定不是Window对象本身,而是它的一个子类,那么到底是那个类,这个对我们后面代码的跟踪非常关键,因为如果找不到这个类,就找不到Activity的很多操作的实现是如何原创 2015-07-30 12:48:49 · 1295 阅读 · 0 评论 -
浅析PackageManager的工作流程
我们在使用PackageManager的时候,一般都是直接获取到PackageManager对象,然后就直接调用它的函数进行相应操作,但它内部究竟是怎样工作的呢?其实它内部获取的是远程服务,真正调用的都是服务中的操作。 我们这里仅仅停留在java层进行讨论,没有深入到底层C/C++实现。在PackageManager的说明中有这样一段话:/** * Class for retrieving va原创 2015-07-30 21:05:08 · 1508 阅读 · 0 评论 -
Adapter的The content of the adapter has changed问题分析
为了更好的理解这个问题出现的真正原因,建议首先看看下面两篇文章:浅析notifyDataSetChanged内部工作流程ListView中requestLayout执行流程解析综合上面两篇文章,我们可以把整个执行过程用下图展示出来。这个图非常的关键,一定要保证在看下文的时候已经理解了上图的过程。下面看看错误提示。 07-28 17:22:02.162: E/AndroidRuntime(16779)原创 2015-08-14 19:51:41 · 848 阅读 · 0 评论 -
AIDL进程间传递复杂数据类型—AIDL传递android.os.Parcelable接口
AIDL进程间传递复杂数据类型系列: AIDL进程间传递复杂数据类型—AIDL传递其他AIDL接口AIDL进程间传递复杂数据类型—AIDL传递android.os.Parcelable接口=========================================前面我们讲到了AIDL进程间传递复杂数据类型—AIDL传递其他AIDL接口,现在我们接着来说第二种了。就是AIDL传递androi原创 2015-08-15 16:16:10 · 2192 阅读 · 0 评论 -
ListView中requestLayout执行流程解析
在前面的浅析notifyDataSetChanged内部工作流程说到notifyDataSetChanged最终执行的其实是requestLayout方法。那么requestLayout方法的执行流程是怎样的,它到底做了什么事呢? 另外,我们也执行在setAdapter里面其实也执行了requestLayout这个方法,所以我们知道这个方法对整个ListView的绘制非常重要,其实不仅是Li...原创 2015-08-14 19:31:44 · 3168 阅读 · 2 评论 -
浅析绑定远程服务bindService基本原理与AIDL分析
我们一般绑定远程服务,分为客户端和服务端,并且需要使用AIDL来实现,这里主要从java层面来讲解它的基本过程,没有深入到Binder的C/C++底层的实现。 我们的通常做法是这样的: 1、创建一个客户端项目和一个服务端项目 2、在客户端项目和服务端项目相同的包下创建AIDL文件 3、实现客户端和服务端的代码这里先给出通常的实现代码:AIDL文件为:interface IManager {原创 2015-08-02 16:59:08 · 3967 阅读 · 0 评论 -
浅析notifyDataSetChanged内部工作流程
首先我们知道notifyDataSetChanged是Adater的一个方法,主要用来通知ListView,告诉它Adapter的数据发生了变化,需要更新ListView的显示,所以当Adapter的数据内容改变时会调用notifyDataSetChanged()方法。 直接看看BaseAdapter中notifyDataSetChanged的源码实现,看notifyDataSetChanged是原创 2015-07-31 19:48:51 · 13925 阅读 · 2 评论 -
Android中Application分析
Application和Activity,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象,用来存储系统的一些信息。通常我们是不需要指定一个Application的,这时系统会自动帮我们创建,如果需要创建自己 的Application,也很简单创建一个类继承 Application并在manifest的application标原创 2015-08-17 18:52:46 · 785 阅读 · 0 评论 -
Android中自定义drawable states
一个state list drawable在根据View的状态来显示不同的图片是非常有用的.例如,我们可以为一个按钮的背景定义一个按下状态和非按下状态的状态图片列表,按钮就会根据不同的状态改变图片.我们也可以通过自定义的图片状态列表使其变得更加的有用。下面是一个邮件客户端,它分别标识了已读邮件和未读邮件。 上面的列表使用了一个ListView,每个列表项使用了一个RelativeLayout,在这翻译 2015-08-18 17:06:09 · 2560 阅读 · 0 评论 -
StateListDrawable使用详解
drawable state系列文章 XML类型的drawable图片的解析处理过程StateListDrawable使用详解详解refreshDrawableList()的执行流程Checkable ViewsAndroid中自定义drawable states===============================================前面介绍了XML类型的drawable图片原创 2015-08-21 12:12:34 · 9887 阅读 · 1 评论 -
XML类型的drawable图片的解析处理过程
首先我们还是举这个简单的例子1、在res/drawable文件下创建selector.xml,示例代码如下:<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_presse原创 2015-08-20 19:45:54 · 4072 阅读 · 0 评论 -
详解refreshDrawableList()的执行流程
在Checkable Views和Android中自定义drawable states文章中,我们可以很清楚的看到当我们自定义图片状态列表的时候,当View的状态发生改变的时候,例如clicked,checked;我们会调用refreshDrawableList来刷新View的显示。那么refreshDrawableState到底做了什么事情,为什么当我们点击控件的时候,控件的背景会随着点击发生改变原创 2015-08-20 14:41:29 · 1788 阅读 · 0 评论 -
Checkable Views
一、什么是Checkable?Checkable是一个接口,如果你自定义的View需要在是与否之间改变其状态,那么你就可以实现这个接口,在Android框架中也包含了一些View实现了这个接口,例如:CheckedTextView和CompounButton就是其中最主要的两个,另外也有它们的一些子类你可以使用,例如:Checkbox, RadioButton, Switch和ToggleButto翻译 2015-08-18 15:45:29 · 774 阅读 · 0 评论 -
浅析getSystemService获取系统服务
所谓系统服务是指可以使用getSystemService方法获取的服务,所谓客户端服务是指应该程序提供的自定义服务。那么getSystemService方法到底有哪些服务呢?我们来看看getSystemService的实现,getSystemService的实现在ContextImpl中。public Object getSystemService(String name) { Servic原创 2015-09-11 15:12:05 · 4887 阅读 · 0 评论 -
Android线程浅析
当一个应用被启动,系统就会创建一个线程来执行这个应用,这个线程被称为主线程。这个线程非常的重要,它的作用主要有以下两点: 1、它负责把事件分发给对应的UI组件,包括绘制事件。 2、它负责应用与UI之间的交互,这些UI就是android.widget和android.view包中的组件。总得来说,它就是负责事件的分发和交互,它跟用户界面UI组件密切相关,所以主线程也被称为UI线程。运行在同一进程的原创 2015-10-17 15:53:28 · 526 阅读 · 0 评论 -
Resources中getString方法解析
在Android开发中,我们的字符串一般都是统一写在项目的res/values/strings.xml中,如果我们需要得到指定的字符串,一般使用getString方法来得到。其实getString特别的有用,而且用法也很灵活,下面我们就来说说这个方法。一、getString的常见用法 在Resources类中它有两种定义形式:public String getString(int id)publi原创 2015-09-15 20:48:56 · 10566 阅读 · 0 评论 -
Android中TrafficStats流量监控类
这个类提供了网络流量统计,这个统计包括上传和下载的字节数和网络数据包数。需要注意的是这个统计不能在所有的平台上使用,如果设备不支持的话,就会返回UNSUPPORTED。常用函数:public static void setThreadStatsTag(int tag)public static int getThreadStatsTag()public static void clearThread原创 2015-09-14 20:19:12 · 4949 阅读 · 1 评论 -
Java异常处理手册和最佳实践
Java异常处理框架是非常强大并且很容易理解和使用,异常可能产生于不同的情况,例如:用户错误数据的输入,硬件故障,网络连接失败,数据服务器故障等等,下面我们需要学习在java中如何处理这些异常。在程序执行的时候,无论什么时候产生错误,都会创建一个Exception对象并且正常的程序流也会中断,JRE会尝试找到处理这个异常的处理者。一个异常对象包含了许多的调试信息,例如:方法层次、产生异常的行号、异常翻译 2015-10-21 15:26:48 · 3767 阅读 · 0 评论 -
使用UncaughtExceptionHandler捕获运行时异常
前面我们知道Exceptions分为可检查异常(checked exceptions)和运行时异常(runtime exception)。具体参照文章Java异常处理手册和最佳实践,对于可检查异常,我们必须对它进行处理,要么捕获要么在方法上使用throws抛给调用者;运行时异常很大可能是因为程序员造成的,它往往是可以避免的,它是无法预测的,所以不需要进行捕获,也不需要在方法上添加throws关键字来原创 2015-10-21 16:37:16 · 3265 阅读 · 0 评论 -
Android自定义属性解析
一般情况下,我们自定义一个View的时候往往会重载它的三个构造函数,如下:public class CustomView extends View { public CustomView(Context context) { this(context, null); } public CustomView(Context context, AttributeSet原创 2015-10-08 14:40:32 · 3949 阅读 · 0 评论 -
自定义Notification和Toast
一、自定义Notification 在Android开发中,我们经常会使用Notification,首先来看看我们使用系统默认的Notification的通常做法。CharSequence title = "I am Notification";int icon = R.drawable.ic_launcher;// 1、定义一个Notification对象Notification noti原创 2015-10-10 11:09:21 · 1280 阅读 · 0 评论 -
Android进程级别与如何防止服务进程被回收
一、Android进程优先级 Android进程优先级具体如下,从高到低:1、Foreground process 前台进程下面几种情况属于前台进程: (1)Activity正在与用户进程交互(Activity的onResume已经被调用) (2)与Activity绑定的Service正在与用户交互 (3)Service运行在前台——Service中调用了startForeground函数原创 2015-10-10 15:57:16 · 4113 阅读 · 1 评论 -
Android获取到inflate服务的方式及inflate的解析过程
Android获取到inflate服务总共有三种方式: 1、使用getSystemService(Context.LAYOUT_INFLATER_SERVICE)mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);mInflater.inflate(R.layout.main原创 2015-10-11 19:12:40 · 1264 阅读 · 0 评论 -
Executor线程池的几种用法
下面将介绍线程池的几种用法 一、Executor执行Runnable任务import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class TestCachedThreadPool{ public static void main(String[]原创 2015-10-12 17:38:12 · 3150 阅读 · 0 评论 -
Android中Runtime类解析及finalize()讲解
在Android中有一个Runtime类,这个类主要是用来让Java应用程序可以与它所在的运行环境进行交互,我们的应用不能创建这个类的实例,如果我们希望得到这个实例的话,直接调用Runtime的静态方法来得到这个类的实例。1、获取Runtime实例 Runtime runtime = Runtime.getRuntime();2、调用相应的函数操作下面我们来看看它里面有哪些函数?public vo原创 2015-10-13 11:09:17 · 3040 阅读 · 0 评论 -
android屏幕唤醒与解锁
在做一个程序的时候,需要监听屏幕唤醒和休眠状态,就需要监听屏幕SCREEN_ON和SCREEN_OFF这两个action。奇怪的是,这两个action只能通过代码的形式注册,才能被监听到,使用AndroidManifest.xml 完全监听不到。查了一下,发现这是PowerManager那边在发这个广播的时候,做了限制,限制只能有register到代码中的receiver才能接收。private v原创 2015-11-13 20:14:14 · 2672 阅读 · 0 评论 -
Android保持设备唤醒状态
为了避免电池的消耗,当Android设备出于闲置状态的时候,就会处于睡眠状态。但是有的时候应用需要唤醒屏幕或者CPU并且保持唤醒状态来完成一些工作。保持屏幕唤醒如果你的应用需要保持屏幕唤醒,例如游戏或者电影。最好的方法就是在你的Activity中使用FLAG_KEEP_SCREEN_ON,这个标签只能用在Activity,不能用在Service或者其他组件。public class MainActi翻译 2015-09-24 16:40:43 · 6703 阅读 · 0 评论 -
Android如何获取手机各项信息
1、使用Build获取架构属性 下面我们来根据源码看看通过Build这个类可以得到哪些配置信息,具体就不解释了,从命名基本可以理解其代表的属性。public class Build { public static final String UNKNOWN = "unknown"; public static final String ID = getString("ro.build原创 2015-11-13 18:53:14 · 4520 阅读 · 0 评论 -
Java中强引用、弱引用、软引用、虚引用
1、强引用(StrongReference)强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。下面有两种强引用方式:Object object = new Object();String str = "hello";只有显式地将原创 2015-11-16 19:12:35 · 726 阅读 · 0 评论 -
Android检查手机是否Root以及应用是否获取Root权限
在Android中如何判断手机是否Root以及应用是否获取了Root权限,下面我们将对开源项目RootTools的源码进行分析。RootTools的源码地址:https://github.com/Stericson/RootTools一、RootTools.isRootAvailable()判断手机是否已经Root 下面RootTools这个类中,RootTools.isRootAvailable原创 2015-11-15 17:33:34 · 8261 阅读 · 1 评论 -
Android中Context相关知识整理
1、Context的种类我们来Context的继承结构。(图片来自:http://blog.csdn.net/guolin_blog/article/details/47028975)从这个类中,我们可以看到Context有三种类型:Application、Activity、Service。另外,从上面可以轻易的看出它使用了装饰者模式,也就是说Application、Activity、Service原创 2015-11-16 13:09:14 · 730 阅读 · 0 评论 -
Android开发相关问题汇总
下面将总结一些Android开发相关的问题,从整体上来把握Android开发,这些问题主要都是摘自别人的总结。Android开发的主要问题包括五个方面:1.性能;2.产品质量;3.产品迭代;4.多进程架构;5,其它典型问题。在性能方面,运行速度依赖于性能分析、优化UI布局,优化算法和数据结构和业务逻辑调整。防止内存泄露是一个需要特别注意的问题。当然,占用内存占用的因素还包括不够优化的数据结构、图片原创 2015-10-16 10:14:40 · 830 阅读 · 0 评论 -
Android中的定时器Timer、AlarmManager、CountDownTimer的使用
1、Timer和TimerTask的使用java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks。 (1)创建一个Timerjava.util.Timer timer = new java.util.Timer(true); // true 说明这个timer以daemon方式运行(优先级低, // 程序结束timer也自动结束),注意,javax.sw原创 2015-11-20 11:05:24 · 4963 阅读 · 0 评论 -
Android中PendingIntent的基本用法
在PendingIntent.java文件中,我们可以看到有如下几个比较常见的静态函数:public static PendingIntent getActivity(Context context, int requestCode, Intent intent, int flags)public static PendingIntent getBroadcast(Context context,原创 2015-11-18 16:26:13 · 10953 阅读 · 0 评论 -
Activity配置文件中的intent-filter
在intent-filter中,我们一般都会使用到android.intent.action.MAIN和android.intent.category.LAUNCHER这两个属性值,我们先来简单说说它们的作用。android.intent.action.MAIN:决定应用程序最先启动的Activity 。android.intent.category.LAUNCHER:决定应用程序是否显示在程序列原创 2015-11-01 17:02:45 · 6037 阅读 · 0 评论 -
Android中Dialog源码解析
我们一般都是在使用AlertDialog,但AlertDialog主要也是继承自Dialog。下面我们来分析分析Dialog源码。一、Dialog构造函数public Dialog(Context context) { this(context, 0);}public Dialog(Context context, int theme) { //创建一个Context mC原创 2015-12-10 22:00:07 · 920 阅读 · 0 评论