Android开发
文章平均质量分 73
androidZhen
这个作者很懒,什么都没留下…
展开
-
AsyncTask和Handler的优缺点比较
AsyncTask实现的原理和适用的优缺点AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程.使用的优点:简单,快捷过程可控使用的缺点:在使用多个异步操作并需要进行Ui变更时,就变得复杂起来.Handler异步实现的原理和适用的优缺点在原创 2017-03-15 14:22:51 · 298 阅读 · 0 评论 -
Android:学习AIDL,这一篇文章就够了
原文链接地址:http://www.jianshu.com/p/a8e43ad5d7d21、概述AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言。是的,首先我们知道的第一点就是:AIDL是一种语言。既然是一种语言,那么相应的就很自然的衍生出了一些问题:为什么要设计出这么一门语言?它有哪些语法?我们应该如何使用转载 2017-03-15 19:08:48 · 444 阅读 · 0 评论 -
自定义Adapter中实现startActivityForResult的分析
最近几天在做文件上传的时候,想在自定义Adapter中启动activity时也返回Intent数据,于是想到了用startActivityForResult,可是用mContext怎么也调不出这个方法,只能调用startActivity这个方法,于是在网上搜一下,可以利用一个方式可以间接的解决这个问题,果断贴代码:Intent mIntent = new Intent(mContext,clazz)原创 2017-03-16 11:11:47 · 6574 阅读 · 4 评论 -
Handler.postDelayed(new Runnable)是否运行在主线程
知识点 postDelayed(new Runnable())是否运行在主线程中? 答案 是的。 这个 new Runnable() 依附于创建Handler的线程, 代码如下 在绝对的UI线程中打印线程ID:System.out.println("UI Thread = " + Thread.currentThread().getId()); 下面在posdelayed中打印运行线程的原创 2017-03-26 13:20:49 · 9916 阅读 · 0 评论 -
如何判断应用被强杀以及解决出现的空指针问题
原文链接判断应用被强杀在Application中定义一个静态变量,给一个初始值,然后在闪屏页面为这个变量重新赋值,接下来闪屏页面会跳转到主页面,我们在主页面对这个值进行判断,如果变量的值是初始值,则说明应用被强杀了,接下来看看相关代码public class MyApp extends Application { public static int CODE = -1; publi转载 2017-03-26 15:47:19 · 505 阅读 · 0 评论 -
Android中 IntentService 与 Service 的区别
Android中的Service是用于后台服务的,当应用程序被挂到后台的时候,问了保证应用某些组件仍然可以工作而引入了Service这个概念,那么这里面要强调的是Service不是独立的进程,也不是独立的线程,它是依赖于应用程序的主线程的,也就是说,在更多时候不建议在Service中编写耗时的逻辑和操作,否则会引起ANR。那么我们当我们编写的耗时逻辑,不得不被Service来管理的时候,就需要引入I原创 2017-03-15 15:09:00 · 595 阅读 · 0 评论 -
序列化Serializable和Parcelable的理解和区别
一、android为什么要序列化?什么是序列化,怎么进行序列化why为什么要了解序列化?—— 进行Android开发的时候,无法将对象的引用传给Activities或者Fragments,我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递。what什么是序列化 —— 序列化,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。how怎么转载 2017-03-17 11:00:55 · 299 阅读 · 0 评论 -
Android中为什么主线程不会因为Looper.loop()里的死循环卡死?
要完全彻底理解这个问题,需要准备以下4方面的知识:Process/ThreadAndroid Binder IPC,Handler/Looper/MessageQueue消息机制,Linux pipe/epoll机制。总结一下主要有3个疑惑的地方:Android中为什么主线程不会因为Looper.loop()里的死循环卡死?没看见哪里有相关代码为这个死循环准备了一个新线程去运转?Ac转载 2017-12-13 16:45:32 · 849 阅读 · 0 评论 -
Dalvik和ART运行时环境的区别
在此,我并没有打算深入的学习Dalvik和ART两种方式的实现原理,只是想知道他俩的区别。之前,也是零零散散的看过,并没有总结成文字。在此,总结下。DalvikDalvik虚拟机,是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为.dex(即“Dalvik Executable”)格式的Java应用程序的运行。.dex格式是专为Dalvik设计的一种压缩格原创 2017-12-22 15:58:12 · 673 阅读 · 0 评论 -
View的生命周期方法和Activity生命周期方法关系
View 是在Activity 中使用到的,所以在自定义View的时候,我们需要了解Activity 生命周期方法和View的生命周期方法调用先后顺序。 见如下图(1) 在Activity onCreate方法中初始化了View , 调用了View 的onFinishInflate (2) 在执行完 Activity的 onPostResume方法之后(第一次onResume之后)才真正开始了V转载 2017-03-31 16:21:14 · 3247 阅读 · 0 评论 -
Android 面试之 Android 篇
基本概念Android 的四大组件Acitivity、Service、BroadcastReceiver、ContentProviderActivity :应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。BroadcastReceiver广播接收器:应用程序可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络原创 2017-03-14 21:07:22 · 333 阅读 · 0 评论 -
Android 内存溢出和内存泄漏的区别
Android 内存溢出和内存泄漏的区别android内存管理Android应用层是由Java开发的,android的davlik虚拟机与jvm也类似,只不过它是基于寄存器的。在java中,通过new为对象分配内存,所有对象在java堆内分配空间;而内存的释放是由垃圾收集器(GC)来回收的。 Java采用了有向图的原理。Java将引用关系考虑为图的有向边,有向边从引用者指向引用对象。线程对象可以作为转载 2017-02-28 14:45:09 · 393 阅读 · 0 评论 -
Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
其实我一直准备写一篇关于Android事件分发机制的文章,从我的第一篇博客开始,就零零散散在好多地方使用到了Android事件分发的知识。也有好多朋友问过我各种问题,比如:onTouch和onTouchEvent有什么区别,又该如何使用?为什么给ListView引入了一个滑动菜单的功能,ListView就不能滚动了?为什么图片轮播器里的图片使用Button而不用ImageView?等等……对于这些问转载 2017-03-01 20:54:34 · 265 阅读 · 0 评论 -
Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
记得在前面的文章中,我带大家一起从源码的角度分析了Android中View的事件分发机制,相信阅读过的朋友对View的事件分发已经有比较深刻的理解了。还未阅读过的朋友,请先参考 Android事件分发机制完全解析,带你从源码的角度彻底理解(上)那么今天我们将继续上次未完成的话题,从源码的角度分析ViewGroup的事件分发。首先我们来探讨一下,什么是ViewGroup?它和普通的View有什么区别?转载 2017-03-02 18:04:09 · 227 阅读 · 0 评论 -
Android高效加载大图、多图解决方案,有效避免程序OOM
高效加载大图片我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状、不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小。比如说系统图片库里展示的图片大都是用手机摄像头拍出来的,这些图片的分辨率会比我们手机屏幕的分辨率高得多。大家应该知道,我们编写的应用程序都是有一定内存限制的,程序占用了过高的内存就容易出现OOM(OutOfMemory)异常。我们可以通过转载 2017-03-03 19:42:34 · 271 阅读 · 0 评论 -
Android DiskLruCache完全解析,硬盘缓存的最佳方案
概述记得在很早之前,我有写过一篇文章Android高效加载大图、多图解决方案,有效避免程序OOM,这篇文章是翻译自Android Doc的,其中防止多图OOM的核心解决思路就是使用LruCache技术。但LruCache只是管理了内存中图片的存储与释放,如果图片从内存中被移除的话,那么又需要从网络上重新加载一次图片,这显然非常耗时。对此,Google又提供了一套硬盘缓存的解决方案:DiskLruCa转载 2017-03-04 16:26:30 · 353 阅读 · 0 评论 -
如何在Android中避免创建不必要的对象
在编程开发中,内存的占用是我们经常要面对的现实,通常的内存调优的方向就是尽量减少内存的占用。这其中避免创建不必要的对象是一项重要的方面。Android设备不像PC那样有着足够大的内存,而且单个App占用的内存实际上是比较小的。所以避免创建不必要的对象对于Android开发尤为重要。本文会介绍一些常见的避免创建对象的场景和方法,其中有些属于微优化,有的属于编码技巧,当然也有确实能够起到显著效果的方法。转载 2017-03-08 15:17:24 · 246 阅读 · 0 评论 -
深入剖析 Android中的 ArrayMap
数据集合在任何一门编程语言中都是很重要的一部分,在 Android 开发中,我们会实用到ArrayList, LinkedList, HashMap等。其中HashMap是用来处理键值对需求的常用集合。 而Android中引入了一个新的集合,叫做ArrayMap,为键值对存储需求增加了一种选择。ArrayMap是什么一个通用的key-value映射数据结构相比HashMap会占用更少的内存空间转载 2017-03-08 16:31:24 · 498 阅读 · 0 评论 -
HashMap实现原理分析
1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表 链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。哈希表 那么我们能不能转载 2017-03-08 17:42:59 · 225 阅读 · 0 评论 -
触摸事件与手势监听--Android GestureDetector详解
目录事件监听的方法GestureDetector类GestureDetector使用方法GesturetDetector.OnGestureListener 接口GesttureDetector.OnDoubleTapListener 接口GesttureDetector.SimpleOnGestureListener 类事件监听的方法在Android应用层上主要有两个层面的触摸事件监原创 2017-03-07 13:53:20 · 1132 阅读 · 0 评论 -
Android中Handler引起的内存泄露
在Android常用编程中,Handler在进行异步操作并处理返回结果时经常被使用。通常我们的代码会这样实现。public class SampleActivity extends Activity { private final Handler mLeakyHandler = new Handler() { @Override public void handleMessage(转载 2017-03-07 19:41:33 · 267 阅读 · 0 评论 -
Android多线程断点续传下载
原理其实断点续传的原理很简单,从字面上理解,所谓断点续传就是从停止的地方重新下载。 断点:线程停止的位置。 续传:从停止的位置重新下载。 用代码解析就是: 断点 : 当前线程已经下载完成的数据长度。 续传 : 向服务器请求上次线程停止位置之后的数据。 原理知道了,功能实现起来也简单。每当线程停止时就把已下载的数据长度写入记录文件,当重新下载时,从记录文件读取已经下载了的长度。而这个长度就转载 2017-03-11 15:03:59 · 271 阅读 · 0 评论 -
Android7.0之后 FileProvider配置报错android.content.pm.ProviderInfo.loadXmlMetaData问题
Android7.0之后 FileProvider配置报错android.content.pm.ProviderInfo.loadXmlMetaData问题工程结构里依赖了一个moudle,因此项目里除了app主模块,还有一个library.直接替换包名就好了,将library中的FileProvider.getUriForFile(this, “com.app.app.fileprovide...原创 2019-06-14 16:15:03 · 1624 阅读 · 1 评论