
android 应用开发
带你装逼带你飞的程序猿
android开发
展开
-
android adb 调试总结
一 windows 上搭配adb 调试环境下面以windows 7 /10 为例说明如何创建adb调试环境。其实在windows上创建adb调试环境很简单,只需要将android SDK 下的adb.exe路径和SDK 下tools路径加入到系统环境变量 path中即可。未配置path下,执行adb命令会出错。1 打开计算机属性-->高级系统设置原创 2016-07-13 23:11:53 · 1122 阅读 · 0 评论 -
Android 仿ButterKnife写自己的IOC注解框架
1 前言一般我们在Android 的开发中,我们在Activity中都会涉及到大量的findViewById操作,这个时候我们可以采用一些开源的框架来帮我们省很多的苦力,例如大名鼎鼎的ButterKnife就是我经常使用的。ButterKnife是一种非常流行的注解框架。主要有以下几个优点:1.强大的View绑定和Click事件处理功能,简化代码,提升开发效率 2.方便的处理Adapter里的Vi原创 2017-05-06 17:50:34 · 644 阅读 · 0 评论 -
Android Scroller的简单使用
1 前言Scroller是一个专门用于处理滚动效果的工具类,一般在我们自定义View时,要实现滚动或者滑动效果,除了使用动画之外,我们往往会使用Scroller来帮我们完成。在android中如ViewPager、ListView等,内部也是使用了Scroller来实现的。2 View的Scroll在介绍Scroller之前,我们知道,在View中自带scroll属性,那就是View中有两个方法,可原创 2017-06-19 17:14:11 · 478 阅读 · 0 评论 -
RecyclerView封装--添加HeaderView和FooterView
1 前言之前已经介绍过,将RecyclerView做了一个最基本的简单封装,包括Adapter的封装,和支持多种item布局等,今天会来介绍如何高效的添加头部和底部,下一篇会介绍,如何添加下拉刷新和上拉加载更多等。最后完成的效果如下: 添加头部和底部其实是一种装饰器设计模式,那么我们先来看看什么是装饰器设计模式2 装饰器设计模式装饰者模式(Decorator [‘dekəreitə] Pattr原创 2017-06-03 20:28:49 · 1981 阅读 · 1 评论 -
RecyclerView封装--添加下拉刷新和上拉加载更多
1 前言关于RecyclerView 添加上拉加载更多和下拉刷新的封装很多,例如有自定义ViewGroup来实现的,也有使用SwipeRefreshLayout来实现的,我觉得都不是太好,因为对于在项目中,需要各种下拉刷新和上拉加载更多的效果,甚至同一项目中都有不同的效果,网上的大多耦合性太严重,无法解耦,按需定制性较差。现在提供一种对RecyclerView的封装,设计如下:2 下拉刷新和上拉加载原创 2017-06-10 12:31:08 · 3857 阅读 · 2 评论 -
Android View坐标分析
1 View的坐标体系首先要知道,在Android中,坐标体系如下: 在android的坐标系中,原点在屏幕左上角,向右x为正,向下y为正。 该坐标原点位于屏幕最左上角的点。一般在AndroidAPP中,我们的布局如下: 这里的原点就位于状态栏的最左上角,因此我们在处理View的坐标时,应该注意这点。而对于View来说,坐标体系如下: view提供的方法getTop:获取到的,是原创 2017-07-02 17:13:28 · 1881 阅读 · 0 评论 -
Android 沉浸式状态栏与隐藏导航栏
1 前言一般我们在Android的APP开发中,APP的界面如下: 可以看到,有状态栏、ActionBar(ToolBar)、导航栏等,一般来说,APP实现沉浸式有三种需求:沉浸式状态栏,隐藏导航栏,APP全屏 沉浸式状态栏是指状态栏与ActionBar颜色相匹配, 隐藏导航栏不用多说,就是将导航栏隐藏,去掉下面的黑条。 APP全屏是指将状态栏与导航栏都隐藏,例如很多游戏界面,都是APP原创 2017-07-05 15:23:41 · 41914 阅读 · 7 评论 -
Android Class类加载机制
1 前言Class类加载机制是了解Android高级技术的基础,现在热门的热修复,插件化,以及Dex分包等技术,都需要理解class类加载机制,了解了class类加载机制我们能更好的理解Android内部原理,从而使我们的技术提高一个层次 Android是基于java的,我们先来了解一下java的类加载机制2 java Class类加载机制java系统自带有三个类加载器,分别是Bootstrap原创 2017-09-16 22:19:28 · 1834 阅读 · 0 评论 -
Android通用框架封装二 Log日志框架封装
1 前言我们在实际开发中日志这个功能时必不可少的,有些是用原生的android.util.Log,或者使用网上开源的第三方框架例如Logger等,不可否认,第三方框架相对于原生的功能增强了不少。但是这里,我想在原生的基础上封装一个非常简单并且实用的日志框架。请看下面的介绍2 Log日志框架的主要功能要封装这个日志框架,首先要知道我们需要什么,要把这个框架做成什么样子。经过思考,我打算把日志框架做成如原创 2017-09-08 23:50:23 · 3460 阅读 · 0 评论 -
Android通用框架封装一 数据中心DataCenter框架封装
1 前言在Android开发中往往会保存和使用各种数据,这些数据按照存储来分,大概会分为3类,第一是保存在内存中的数据,第二是保存在SharedPreferences中数据,第三是保存在SQL数据库中。为了统一管理及访问,使上层应用忽略掉这些差异,及为了减少对SQL及SharedPreferences的操作,往往会对这些进行封装,之前在网络上看到的大多都是对SharedPreferences进行封装原创 2017-09-03 16:58:32 · 2133 阅读 · 0 评论 -
Android View 高级框架一 Builder模式打造通用TitleBar
1 简介我们在开发中往往都有一个TitleBar在APP最上面。例如下图 这个TitleBar如果每次都写在布局中,则每个Activity都要在布局中展现。会增加布局的复杂度,另外也不便于维护。另外,对于不同的界面,有时候这个TitleBar又会有所差别。因此怎么定制化一个可以复用又方便维护的TitleBar呢?当然,我们也可以单独写一个布局文件,然后每个Activity的界面include进原创 2017-10-09 20:46:29 · 974 阅读 · 0 评论 -
Android通用框架封装三 CrashHandler框架封装
1 前言在日常使用中我们总会记录一些异常信息,例如崩溃信息等,这些功能可以借助第三方工具实现,例如友盟,oneAPM 等,但是有时这些工具满足不了我们的需求,或者说不是那么友好,这时,我们就需要自己做一个异常信息收集工具了。2 Crash框架的功能在日常使用中我们总会记录一些异常信息,例如崩溃信息等,这里我们就可以实现以下的崩溃框架。功能: 1记录崩溃时的异常信息,包括崩溃时的异常栈信息 2 将原创 2017-10-28 11:42:45 · 899 阅读 · 0 评论 -
Android 360开源全面插件化框架RePlugin 实战
1 RePlugin 介绍RePlugin是一套完整的、稳定的、适合全面使用的,占坑类插件化方案,由360手机卫士的RePlugin Team研发,也是业内首个提出”全面插件化“(全面特性、全面兼容、全面使用)的方案。其主要优势有:极其灵活:主程序无需升级(无需在Manifest中预埋组件),即可支持新增的四大组件,甚至全新的插件 **非常稳定:**Hook点仅有一处(ClassLoader),无原创 2017-10-14 20:15:17 · 17854 阅读 · 2 评论 -
Android View 高级框架二 Builder模式打造通用对话框
1 前言在我们的日常开发中,对话框是一个常见的组件,例如下面的对话框,分别是三种不同类型的对话框 在Android开发中,对话框也和我们的TitleBar一样,有各种样式,而且它比TitleBar更加的复杂,因为对话框显示的位置还有底部显示,中心显示,顶部显示,以及动画等,因此。对于对话框,我们也可以封装以下。这里我们还是采用Builder模式来封装。封装思路:将UI实现及事件和我们对话框基本原创 2017-11-04 15:10:18 · 740 阅读 · 0 评论 -
Android架构组件三 Android Architecture Components ViewModel组件解析
1 前言ViewModel是android架构组件中非常重要的一个组件,它是Android架构分层的核心,有关它的用法和资料可以参考 Android架构组件一 Android Architecture Components开发入门 也可以参考官方给出的示例https://developer.android.google.cn/topic/libraries/architecture/vie...原创 2018-02-10 18:07:12 · 1652 阅读 · 0 评论 -
Android架构组件四 Android Architecture Components LiveData组件解析
1 前言简单的说,LiveData是一个数据持有类,持有的数据可被观察者观察。它具有以下特点数据可以被观察者订阅;能够感知组件(Fragment、Activity、Service)的生命周期;只有在组件出于激活状态(STARTED、RESUMED)才会通知观察者有数据更新;当然这里的组件都是指实现了LifecycleOwner接口的组件。 官方推荐我们使用LiveData时结...原创 2018-02-25 17:29:44 · 667 阅读 · 0 评论 -
Android APP启动优化一 APP启动测量
先占个坑,后续来补齐原创 2019-02-09 22:34:31 · 562 阅读 · 0 评论 -
Android APP启动优化二 使用Systrace和TraceView分析启动耗时
上一篇App启动已经初步的分析了有哪些启动类型以及怎么去简单的测量App启动的耗时,这一篇主要使用两个工具来粗略的分析启动的耗时到底在哪些地方。下面开始介绍1 使用systrace抓取trace.html文件在使用Systrace之前,建议大家好好参考官方的这边介绍systrace官方介绍这里面详细的介绍了systrace抓取trace.html的命令以及选项的意思,我采用的命令如下call...原创 2019-04-21 15:47:16 · 7388 阅读 · 0 评论 -
Android MVP 架构一 View与Presenter
1 前言很早就在开始关注Android的架构方面的东西了,在android开发中,我们不外乎这三种架构:MVC,MVP,MVVM。关于这三者的简单介绍如下:1 MVCMVC的经典架构如下: MVC简单的来说就是通过Controller去操作Model层,同时去更新View层显示。另外View层也会与Model层有交互。造成这三者之间的耦合比较大。 比如我们在平常的Android开发中,Vie原创 2017-04-01 15:26:12 · 17817 阅读 · 2 评论 -
Android 6.0 运行时权限
1、运行时权限定义android6.0 运行时权限是指抛弃以前我们在manifest.xml文件中一次性赋予app权限,转而在程序真正运行时授予权限(需要用户同意),如果没有授予权限,则出现异常的一种机制。6.0之前的权限模型在AndroidManifest中声明可能用到的所有权限用户在安装时,系统展示所有权限,用户安装即授予所有权限,取消则拒绝安装6.0新的运行时权限将权限分为一般权限和危原创 2017-05-01 21:05:30 · 1040 阅读 · 0 评论 -
Android MVP 架构二 Presenter与Model
1 前言前一篇我们主要介绍了MVP中View与Presenter的概念及交互,View层持有Presenter的实例,将一切逻辑操作都转发给Presenter层来操作,Presenter层持有View层的实例,并且将有关界面的部分的操作转发给View层实例操作,而设计到数据的部分则和Model层一起来操作。根据google官方的MVP项目例子todoapp,我们还分别介绍了Activity的作用,V原创 2017-04-15 20:18:32 · 5192 阅读 · 3 评论 -
android BLE 编程详解
最近可穿戴设备发展的很火,而且蓝牙4.0 以上支持低功耗模式,因此,android4.3(API18)以上支持蓝牙BLE编程。BLE是蓝牙4.0的核心Profile,主打功能是快速搜索,快速连接,超低功耗保持连接和传输数据,弱点是数据传输速率低,由于BLE的低功耗特点,因此普遍用于穿戴设备。下面介绍android 的BLE开发。1. 基本概念介绍BluetoothManager原创 2016-07-25 18:11:10 · 6945 阅读 · 1 评论 -
Android开发之Hybrid开发
转载请标明出处:一片枫叶的专栏本文将介绍Android中hybrid开发相关的知识点。hybrid开发实际上是混合开发的意思,这里的混合是H5开发与Native开发混合的意思。下面的文章中我们将逐个介绍一下hybrid开发的概念、hybrid开发的优势、Android中如何实现hybrid开发、简单的hybrid开发的例子,以及在产品实践中对hybrid开发的应用,希望通过本篇文章的介绍让您能够对A转载 2016-10-11 12:17:22 · 8234 阅读 · 0 评论 -
webview常见问题集锦
转载请标明出处一片枫叶的专栏本文中我们将介绍一下Android中webview在使用过程中会遇到的一些问题。这些问题主要是webview在使用过程中我已经趟过的坑,希望通过这篇文章的介绍能够帮助大家更好的使用webview。下面是本文主要介绍的一些知识点,后续使用过程中可能会有更新。webview的性能优化webview注入cookie信息webview退出activity异常webview转载 2016-10-11 21:37:58 · 9019 阅读 · 0 评论 -
Android内存泄露监测工具之leakcanary
1 什么是内存泄露Java内存泄漏指的是进程中某些对象(垃圾对象)已经没有使用价值了,但是它们却可以直接或间接地引用到gc roots导致无法被GC回收。无用的对象占据着内存空间,使得实际可使用内存变小,形象地说法就是内存泄漏了。简单来说就是该被回收的由于某种原因没有被回收。2 系统分配的应用内存大小通过ActivityManager可以获取系统为我们分配的内存大小 ActivityManager原创 2016-10-24 16:30:01 · 1736 阅读 · 1 评论 -
WebView的JavaScript与本地代码三种交互方式
本篇来自 姜维 的投稿,要是经常跟WebView打交道的朋友,那么对于今天的话题肯定不会陌生。本篇将从三个角度出发,带你找到最优方案。 姜维 的博客地址:http://blog.youkuaiyun.com/jiangwei0910410003WebView的漏洞分析漏洞产生的原因最近在开发过程中遇到一个问题,就是 WebView 使用的时候,还是需要解决之前系统(4.2之前)导致的一个漏洞,虽然现在这个系统转载 2016-09-30 10:08:15 · 5310 阅读 · 0 评论 -
android EditText中的几大坑
前言项目中需要用EditText来输入金额,并且默认需要前置”¥”效果如下: 很自然的想到用一个TextView与一个EditText来实现。所以布局文件如下: <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"原创 2016-11-21 11:31:14 · 6160 阅读 · 1 评论 -
android 自定义View开发实战(五) TextView滚动显示
1 前言由于项目需求,需要显示如下的效果 查了下资料,可以使用TextSwitcher实现,废话不多说。直接上干货2 定义attrs属性对于这个滚动TextSwitchView,我们一般用得比较多的属性就是字体大小与颜色了。我们将它定义在attrs.xml文件中 <!--TextSwitchView属性--> <declare-styleable name="TextSwitch原创 2016-12-03 15:32:50 · 1312 阅读 · 0 评论 -
android 自定义View开发实战(四) 圆角矩形ImageView实现
0 前言有时项目中用ImageView显示图片时需要把形状显示成圆角矩形。因为直角的太生硬了,体验不太友好。为此我们可以自定义一个ImageView来实现。1 思路我们自定义一个RoundCornerImageView类继承ImageView,通过改变在onDraw()方法中改变最终绘制的形状。2 实现下面直接上代码: xml,attrs.xml: <declare-styleable na原创 2016-11-25 16:24:47 · 3308 阅读 · 0 评论 -
RecyclerView 的简单封装
1 前言最近在学习Material Design设计,首当其冲就是学习RecyclerView,参考了下Hongyang自己对RecyclerView的ViewHolder与Adapter做了下简单的封装。下面,废话不多说,直接上干货。2 ViewHolder的封装ViewHolder在RecyclerView中的作用主要就是用来缓存我们每一个Item对应的View视图的,我们在Adapter中主要原创 2016-12-11 17:02:47 · 611 阅读 · 0 评论 -
android SharedPreferences使用技巧
前言android中我们经常用SharedPreferences来存储数据,关于其基本用法我这里就不介绍了,下面介绍几个使用技巧1 SharedPreferences一次性存储大量数据可以采用事务有时我们需要一次性的存入大量的数据,比如存储500个数据,这时如果我们不采用事务,每次调用SharedPreferences.Editor 的putXxx()方法后,调用SharedPreferences.原创 2016-11-22 22:34:28 · 885 阅读 · 0 评论 -
android 中保证进程不被杀死
前言开发一个需要常住后台的App其实是一件非常头疼的事情,不仅要应对国内各大厂商的ROM,还需要应对各类的安全管家…虽然不断的研究各式各样的方法,但是效果并不好,比如任务管理器把App干掉,服务就起不来了… 一般来说:有以下几种可行的方法来使自己的进程不被杀死1 进程不被杀死的方法1、提高Service的优先级:这个,也只能说在系统内存不足需要回收资源的时候,优先级较高,不容易被回收,然并卵…2、原创 2016-11-24 21:06:43 · 3933 阅读 · 2 评论 -
android 自定义View开发实战(六) 可拖动的GridView
1前言由于项目需求,需要把项目的主界面采用GridView显示,并且需要根据模块优先级支持拖动图标(砍死产品狗)。为此,自定义了一个支持拖拽图标的GridView。效果如下: 具体效果如上图2 可拖拽的GridView实现要实现上面的效果有两个难点,第一就是如何创造一个可拖动的View在我们的Activity界面上。第二个就是如何实现两个View的交换关于第一个:我们可以用WindowManage原创 2017-01-06 19:52:52 · 2800 阅读 · 2 评论 -
Android控件——ViewFlipper的使用,垂直滚动广告条
1 前言之前开发过一个TextView的滚动显示,但是局限性比较大,只能显示文字,不能显示图片等其他View。对比淘宝App的淘宝头条,发现显示的内容挺丰富的。网上搜索了下资料发现android自带的有控件ViewFlipper来实现。于是记录下来。2 ViewFlipper简介ViewFlipper是android系统提供的使View滚动的控件,ViewFlipper直译就是View快速滚动。打开原创 2017-01-17 19:46:02 · 7597 阅读 · 0 评论 -
Android 热修复Tinker接入实战
1 热修复原理热修复的原理一句话总结就是:就是dex的动态替换。首先,我们知道PC上的JVM是直接解析class字节码的,而android上的JVM是解析dex文件的,因此Android程序要运行需要先编译打包成dex,之后才可以被Android虚拟机解析运行。所以我们如果想要即时修补bug就要让修复的代码被Android虚拟机识别,如何才能让虚拟机认识我们修改过的代码呢,也就是我们需要把修改过的代原创 2017-02-25 17:52:45 · 5803 阅读 · 1 评论 -
Android 性能优化总结
1 前言经常谈到Android性能优化,包括面试也经常问道,包括google官方也为此开设了专门的培训课程。因此这里做一个简单的总结吧。 Android性能优化主要从以下几个方面入手UI优化,内存优化,网络优化,电池优化,高性能编码优化2 UI优化UI方面的优化主要是避免UI绘制方面的掉帧现象,我们知道Android每隔16ms便会重新渲染一帧图像。UI方面优化主要从以下几点来入手。布局优化原创 2017-03-18 16:24:47 · 426 阅读 · 0 评论 -
Android greenDAO 数据库框架接入指南
1 关于GreenDAOgreenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案。可以说它是专门为android平台下优化的ORM数据库,关于greenDAO的详细资料可以看官网greenDao greenDAO 主要有以下几大优势: 1、一个精简的库 2、性能最大化 3、内存开销最小化 4、易于使用的 APIs 5、对 Android 进行高度优化 下面截取原创 2017-03-05 18:48:05 · 667 阅读 · 0 评论 -
Android AIDL开发Binder应用中注意事项
1 前言在我们的应用开发中,我们常常有跨进程通信的需求,如果使用AIDL方式,就是用Binder进行通信,往往会新建AIDL文件来定义好服务,服务端实现这些服务,而客户端会具体调用这些服务。关于怎么新建AIDL文件,以及如何实现客户端与服务端,这里就不做讨论了,网上由于大把的教程,这里主要讨论下需要开发中注意的事项。 需要注意的事项如下:2 Binder通信注意事项1 AIDL文件路径问题当我原创 2017-04-09 16:21:09 · 1767 阅读 · 0 评论 -
Android 内存优化一 内存抖动的定位及优化
1 Android内存抖动内存抖动是指内存忽高忽低,有短时间内快速的上升和下落的趋势,内存呈锯齿状。此时会频繁的GC,造成卡顿,甚至有OOM的可能内存抖动越剧烈,说明单次分配的内存更大。2 内存抖动的定位对于内存抖动的定位可直接使用Memory Profiler,原因是Memory Profiler可直接反应APP的内存占用,方便进行跟踪发生内存抖动时,我们选择内存变化锯齿状的区域,然...原创 2019-05-03 19:10:04 · 2875 阅读 · 0 评论