Android开发笔记
文章平均质量分 74
Android踩坑纪实
Mlib
这个作者很懒,什么都没留下…
展开
-
【Android】App应用前后台切换的一种监听方法
Android本身并没有提供监听App的前后台切换操作的方法。最近看到一种简单巧妙的方法来监听前后台,这里分享记录一下。一、Activity生命周期我们知道在Android中,两个Activity,分别为A和B。假设此时A在前台,当A启动B时,他们俩之间的生命周期关系如下,可以参考之前的这篇文章【Android】Activity与Fragment的生命周期的关系: A.onPaus...原创 2018-04-06 20:13:39 · 4182 阅读 · 0 评论 -
【Android】Retrofit源码分析
Retrofit简介retrofit n. 式样翻新,花样翻新 vt. 给机器设备装配(新部件),翻新,改型Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装。注意这里并没有说它是网络请求框架,主要原因在于网络请求的工作并不是 Retrofit 来完成的。Retrofit 2.0 开始内置 OkHttp,前者专注于接口的封装,后者专注于真正的网络请...原创 2018-04-13 18:54:57 · 723 阅读 · 0 评论 -
【Android】OkHttp源码分析
Android为我们提供了两种HTTP交互的方式:HttpURLConnection 和 Apache HttpClient,虽然两者都支持HTTPS,流的上传和下载,配置超时,IPv6和连接池,已足够满足我们各种HTTP请求的需求。但更高效的使用HTTP 可以让您的应用运行更快、更节省流量。而OkHttp库就是为此而生。在开始分析OkHttp之前我们先了解一下 HttpURLConnection原创 2018-01-26 19:02:36 · 1007 阅读 · 0 评论 -
【Java】线程池ThreadPoolExecutor实现原理
引言线程池:可以理解为缓冲区,由于频繁的创建销毁线程会带来一定的成本,可以预先创建但不立即销毁,以共享方式为别人提供服务,一来可以提供效率,再者可以控制线程无线扩张。合理利用线程池能够带来三个好处:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建...原创 2018-02-13 17:34:17 · 10557 阅读 · 4 评论 -
【Android】Binder - 如何使用AIDL
一、跨进程通信为了演示方便,将Service与Activity处于不同的进程,可以在AndroidManifest.xml中,把service配置成android:process=":remote" ,也可以命名成其他的。AIDL(1) IRemoteService.aidl:定义Server端提供的服务接口// IRemoteService.aidlpackage com.cuc.myandro原创 2017-11-02 15:21:39 · 548 阅读 · 0 评论 -
【Android】常用ADB命令总结
1. 获取当前运行的Activity方法一:adb shell logcat | grep ActivityManager 方法二:adb shell dumpsys activity activities 2. 安装包信息adb shell dumpsys package app-release_1.0.9.apk原创 2017-11-27 14:02:46 · 582 阅读 · 0 评论 -
【Android】源码分析 - Activity启动流程
启动Activity的方式Activity有2种启动的方式,一种是在Launcher界面点击应用的图标、另一种是在应用中通过Intent进行跳转。我们主要介绍与后者相关的启动流程。Intent intent = new Intent(this, TestActivity.class);startActivity(intent);从Activity入手@Overridepublic void st原创 2017-12-23 19:07:28 · 893 阅读 · 0 评论 -
【Android】源码分析 - View事件分发机制
事件分发对象(1)所有 Touch 事件都被封装成了 MotionEvent 对象,包括 Touch 的位置、时间、历史记录以及第几个手指(多指触摸)等。(2)事件类型分为 ACTION_DOWN, ACTION_UP,ACTION_MOVE,ACTION_POINTER_DOWN,ACTION_POINTER_UP, ACTION_CANCEL,每个事件都是以 ACTION_DOWN 开始 ACT原创 2017-12-26 19:27:57 · 577 阅读 · 0 评论 -
【Android】源码分析 - LRUCache缓存实现原理
一、Android中的缓存策略一般来说,缓存策略主要包含缓存的添加、获取和删除这三类操作。如何添加和获取缓存这个比较好理解,那么为什么还要删除缓存呢?这是因为不管是内存缓存还是硬盘缓存,它们的缓存大小都是有限的。当缓存满了之后,再想其添加缓存,这个时候就需要删除一些旧的缓存并添加新的缓存。因此LRU(Least Recently Used)缓存算法便应运而生,LRU是近期最少使用的算法,它原创 2018-01-13 11:20:29 · 4458 阅读 · 0 评论 -
小米4A安装App报错INSTALL_FAILED_VERSION_DOWNGRADE
问题这两天用小米手机debug,完全卸载之后发现总是报错INSTALL_FAILED_VERSION_DOWNGRADE或者INSTALL_FAILED_ALREADY_EXISTS,AS的命令行中显示:Unknown failure (Failure - not installed for 0) Error while Installing APKs按理说应用已经卸载了,很是奇怪,不论是从应用商店原创 2017-10-20 10:54:24 · 1620 阅读 · 0 评论 -
【Android】打印输出调用栈
1. Java层如何打印调用栈?在优化Android启动过程时,同事给出一种打印出调用栈的函数。分享一下:java.util.Map<Thread, StackTraceElement[]> ts = Thread.getAllStackTraces(); StackTraceElement[] ste = ts.get(Thread.currentThread()); for (Sta转载 2017-10-26 10:28:52 · 806 阅读 · 0 评论 -
【Android】Dialog异常CalledFromWrongThreadException深入分析
问题在使用Dialog时,因为线程问题,在调用dismiss方法时出现了CalledFromWrongThreadException的Crash,如下:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch it原创 2017-10-27 09:40:21 · 2960 阅读 · 1 评论 -
【Android】源码分析 - IntentService机制
前言提到Android的多线程机制,除了我们常用的Thread来实现异步任务之外,还有AsyncTask:封装了线程池和Handler,主要为了子线程更新UI;HandlerThread:一个已经拥有了Looper的线程类,内部可以直接使用Handler;IntentService:一个内部采用HandlerThread来执行任务的Service服务,任务执行完毕后会自动退出;今天我们来根据原创 2017-10-05 16:17:42 · 654 阅读 · 0 评论 -
【Android】源码分析 - AsyncTask异步任务机制
前言提到Android的多线程机制,常用的有如下几种方式:AsyncTask: 封装了线程池和Handler,为 UI 线程与工作线程之间进行快速切换提供一种便捷机制。适用于当下立即需要启动,但是异步执行的生命周期短暂的使用场景。HandlerThread: 一个已经拥有了Looper的线程类,内部可以直接使用Handler。为某些回调方法或者等待某些任务的执行设置一个专属的线程,并提供线程任务原创 2017-10-10 14:16:56 · 549 阅读 · 0 评论 -
【Android】EventBus 3.0 源码分析
概述EventBus是一个基于观察者模式的事件发布/订阅框架,开发者可以通过极少的代码去实现多个模块之间的通信,既可用于 Android 四大组件间通讯,也可以用于异步线程和主线程间通讯,而不需要以Interface回调、handler或者BroadCastReceiver的形式去单独构建通信桥梁。从而降低因多重回调导致的模块间强耦合,同时避免产生大量内部类。这是EventBus源码中的介绍:/**原创 2017-09-30 19:39:44 · 1542 阅读 · 0 评论 -
【Android】自定义ImageView高度自适应,宽度成比例缩放
/** * 高度自适应ImageView,高度始终充满显示区域,宽度成比例缩放 */public class AutoHeightImageView extends ImageView { public AutoHeightImageView(Context context) { super(context); } public AutoHeightImag原创 2017-07-07 10:18:38 · 4391 阅读 · 2 评论 -
【Android】源码分析 - Handler消息机制再梳理
前言多线程的消息传递处理,从初学Android时的Handler,懵懵懂懂地照猫画虎,到后来一头雾水的疑惑它为什么这么复杂,再到熟悉之后的叹为观止,一步步地都是自己踩过的足迹,都是成长啊哈哈哈。虽然离出神入化的境界还远十万八千里呢,但Android中的Handler多线程消息传递机制,的确是研发技术学习中不可多得的一个宝藏。本来我以为自己之前的学习以及比较了解 Handler,在印象中 Androi原创 2017-08-04 14:09:54 · 1771 阅读 · 1 评论 -
【Android】Audio音频输出通道切换 - 蓝牙、外放
手机音频的输出有外放(Speaker)、听筒(Telephone Receiver)、有线耳机(WiredHeadset)、蓝牙音箱(Bluetooth A2DP)等输出设备。在平时,电话免提、插拔耳机、连接断开蓝牙设备等操作系统都会自动切换Audio音频到相应的输出设备上。比如电话免提就是从听筒切换到外放扬声器,插入耳机就是从外放切换到耳机。场景需求Android系统自动切换的这些策略,并不能全部原创 2017-05-18 11:17:13 · 17990 阅读 · 10 评论 -
【Android】view.setVisibility(View.GONE)导致动画无效
问题在安卓中使用动画将一个view弹出布局时,如果它本来是GONE掉的,那么你可能会想在动画的onAnimationStart() 时显示,然后在onAnimationEnd() 时隐藏它。但是很快会发现,这样的话动画会无法及时显示出来,而是只有其他的view显示出来的时候它才会姗姗来迟。那么是什么原因呢?查了很多资料才知道,不能在 onAnimationStart() 时才显示,必须在动画开始之前原创 2017-03-15 11:39:58 · 7221 阅读 · 0 评论 -
【Android】adb 查看所有程序包名
adb shell pm list packages列出所有的包名$ adb shell pm list packagespackage:com.mediatek.mcopackage:com.android.providers.telephonypackage:com.android.providers.calendarpackage:com.android.providers.medi原创 2017-04-05 12:10:47 · 53511 阅读 · 3 评论 -
【Android】使用UncaughtExceptionHandler捕获全局异常
简介当程序崩溃(Crash)的时候,默认是不对异常信息做处理的。如果想要把异常信息保存到本地文件中,或上传的服务器。那么就要借助UncaughtExceptionHandler这个类。使用方法一、实例化public class CrashLogCatch { public static final String THREAD_NAME_MAIN = "com.example.ABC";原创 2017-04-20 14:05:17 · 1239 阅读 · 0 评论 -
【Android】判断应用Application、Activity、Service是否处于活动状态
通过ActivityManager我们可以获得系统里正在运行的activities,包括进程(Process)等、应用程序/包、服务(Service)、任务(Task)信息。1、判断应用App是否活动/** * 判断应用是否已经启动 * @param context 一个context * @param packageName 要判断应用的包名 * @return bool原创 2017-05-03 12:45:23 · 9711 阅读 · 0 评论 -
【Android】内存泄漏分析心得
本文来源:QQ空间终端开发团队公众号前言对于C++来说,内存泄漏就是new出来的对象没有delete,俗称野指针; 对于Java来说,就是new出来的Object 放在Heap上无法被GC回收;本文通过QQ和Qzone中内存泄漏实例来讲android中内存泄漏分析解法和编写代码应注意的事项。Java 中的内存分配静态储存区:编译时就分配好,在程序整个运行期间都存在。它主要存放静态数据和常量;原创 2017-02-13 18:58:49 · 574 阅读 · 0 评论 -
【Gradle】Android Studio中Gradle重复依赖的问题
问题项目中有个Module需要解析json所以选用了依赖Gson,但是编译时报错如下:Error:Execution failed for task ':app:transformClassesWithJarMergingForAutoioDebug'.> com.android.build.api.transform.TransformException: java.util.zip.ZipEx原创 2017-02-23 13:02:58 · 8022 阅读 · 2 评论 -
【Android】AlertDialog中的EditText不能弹出软键盘的问题
摘要AlertDialog中加入EditText但是不弹出软键盘等问题网上有很多不管用的解决方案,有的方案是强制弹出软键盘,然而即使弹出来,也是显示在AlertDialog的后面,被Dialog遮挡。解决方案Dialog的官方文档:http://developer.android.com/reference/android/app/Dialog.html ,其中有一段:原创 2017-01-20 10:44:37 · 3597 阅读 · 0 评论 -
【Android】TextView中不同大小字体如何上下垂直居中?
前言在客户端开发中,我们往往需要对一个TextView的文字的部分内容进行特殊化处理,比如加粗、改变颜色、加链接、下划线等。iOS为我们提供了AttributedString,而Android则提供了SpannableString。在Android的android.text.style包下为我们提供了各种各样的span(可以参考这篇文章),例如:AbsoluteSizeSpan(int size)原创 2017-01-03 16:47:12 · 15607 阅读 · 4 评论 -
【Android】阅读Android源码的一些姿势
本文转载自 阅读Android源码的一些姿势 — by Kaede日常开发中怎么阅读源码找到正确的源码IDE是日常经常用的东西,Eclipse就不说了,直接从Android Studio(基于IntelliJ Community版本改造)开始。我们平时的Android项目,都是要依赖Android SDK里对应API Level的android.jar包(而且是以Provided的形式依赖),这转载 2017-01-04 13:54:11 · 980 阅读 · 0 评论 -
【Android】RxJava 入门详解
本文转载自 给 Android 开发者的 RxJava 详解 —— by 扔物线前言我从去年开始使用 RxJava ,到现在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的 Android 项目也在使用 RxJava ,并且使用的场景越来越多 。而最近这几个月,我也发现国内越来越多的人开始提及 RxJava 。有人说『RxJava 真是太好用了』,有人说『RxJava 真转载 2016-12-20 11:02:40 · 732 阅读 · 0 评论 -
Android 热修复原理和实现
查看原文: Android 热修复,没你想的那么难 —— by kymjs张涛一种动态加载最简单的实现方式,代码实现起来非常简单,重要的是这种思路和原理 《插件化从放弃到捡起》第一章,首先看一张图:这张图是我所理解的 Android 插件化技术的三个技术点以及它们的应用场景。今天以 【Qzone 热修复方案】为例,跟大家讲一讲插件化中 热修复方案 的实现。原理ClassLoader在 Java 中转载 2016-11-10 13:34:53 · 685 阅读 · 0 评论 -
【Android】微信热修复 Tinker 的集成和使用
简介Tinker: n. 〈英〉小炉匠,补锅匠,修补匠Tinker 是微信官方开源的 Android 热修复框架,支持在无需升级APK的前提下更新 dex, library and resources 文件。它也就是今年9月24才刚刚开源,几天功夫star数就超过3000,可见在开发者中的影响力有多大,也说明这是一个刚需。Tinker GitHub: https://github.com/Ten原创 2016-11-17 11:51:53 · 3349 阅读 · 0 评论 -
【Android】抽象布局 — include、merge 、ViewStub
在布局优化中,Androi的官方提到了这三种布局<include/>、<merge />、<ViewStub />,并介绍了这三种布局各有的优势,下面也是简单说一下他们的优势,以及怎么使用,记下来权当做笔记。一、布局重用<include/><include />标签能够重用布局文件,简单的使用如下:<LinearLayout xmlns:android="http://schemas.android原创 2016-09-19 11:47:30 · 877 阅读 · 0 评论 -
深入了解Android Studio和Gradle
原文链接: 重新认识AndroidStudio和Gradle,这些都是我们应该知道的 — by 井方哥前言主要从AndroidStudio的环境安装升级,Gradle,Eclipse转AS,多渠道配置,Maven私服,Action,Option,快捷键等几个方面出发,讲一些操作技巧以及我对AndroidStudio使用的一些理解与经验。本文较全面的讲述了我们在开发中必须要了解的,比较多而全,可能转载 2016-10-18 17:08:44 · 704 阅读 · 0 评论 -
【Android】Broadcast广播机制总结
原文链接: Android总结篇系列:Android广播机制1. Android广播机制概述Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者(广播接收器)。广播作为Android组件间的通信方式,可以使用的场景如下:同一app内部的同一组件内的消息通信(单个或多个线程之间);同一app内部的不同组件之间的消息通信(单个进程原创 2016-10-25 16:06:35 · 1024 阅读 · 0 评论 -
【Android】 保存图片到系统图库, 并立即显示在图库中
搬运原链接:http://stormzhang.github.io/android/2014/07/24/android-save-image-to-gallery/【正文】转载 2014-09-12 16:24:42 · 2012 阅读 · 0 评论 -
【Android】如何启动调用其他app中的Activity
最近项目正在将原系统拆分为小型App,所以需要在原Project中启动另一个新的App中的Activity。这样的话启动要用到ComponentName ,它就是用来打开其他应用程序中的Activity或服务的。原创 2015-09-15 12:19:01 · 5633 阅读 · 0 评论 -
Android Studio 快捷键操作指南
1、 Ctrl + Shift + 任意数字 添加bookmark书签,标记鼠标光标所在行,可以用作编辑器中快速跳转的操作。重新按下则取消书签标记。按住“Alt+对应数字”回到该数字所对应的bookmark所在行。 比如按下“Ctrl+Shift+5”,就会如下标记书签: 2、Ctrl + G find Usages. 查找调用3、Alt + Enter回车键 进行 “代码原创 2015-09-18 10:48:19 · 644 阅读 · 0 评论 -
【Android】onActivityResult()和onResume()的调用顺序问题
在Android生命周期中,如果使用到startActivityForResult(),则在新Activity被finish掉之后,onActivityResult()和onResume()到底是哪一个先调用的呢?原创 2015-09-18 17:16:24 · 11794 阅读 · 1 评论 -
【Android】长按连续触发事件的实现方法
项目中需要实现一个类似购物车数量的小组件,需要单击时增加数量,长按时可以连续增大,之前的代码实现效果不理想,google后得到一个解决方法,测试可以完美实现。实现效果大致如图: 【原理说明】大致原理是,如果手指按在view上,则使用ScheduledExecutorService对象执行scheduleWithFixedDelay()方法,每隔一个间隔不停地向Handler发送Messag原创 2015-11-19 14:35:28 · 7464 阅读 · 2 评论 -
【Android】SDK和API Level版本的对应关系
这里记录一下android的SDK和API版本号之间的对应关系,方便以后的查看。例如以下的 build.gradle 配置文件指定了项目兼容的最低android API版本号:minSdkVersion 16,那么该项目兼容的系统版本就是Android 4.1.2以上的机型。apply plugin: 'com.android.application'android { compileSd原创 2015-11-24 11:08:16 · 18318 阅读 · 0 评论 -
【Android】Fragment的生命周期详解
作为Android开发的基础知识,大家可能都了解Activity的生命周期,但是Fragment的生命周期和Activity生命周期之间的关系到底是怎么样的呢?相互调用机制又如何呢?一、我们首先观察一下Activity的生命周期: Fragment生命周期: Activity和Fragment生命周期的对比图: 【参考资料】: 1、Android Fragment源代码 2、API原创 2015-11-25 11:43:05 · 2031 阅读 · 0 评论