Android开发
文章平均质量分 81
chencangui
公棕号:陈大发随笔,程序员陈师兄、8年大厂程序员经历。csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战
展开
-
玩转沉浸模式&全屏显示
简介System Bar,系统状态栏,用来展示通知、表现设备状态和完成设备导航的屏幕区域。通常上来说,系统栏(System bar)包括状态栏和导航栏,一般都是与程序同时显示在屏幕上的。但有些场景,譬如视频播放、小说阅读等,可以通过暂时隐藏系统栏,来为用户提供一个更加专注的体验环境。不同场景的诉求和实现透明状态栏参考链接1、http://hukai.me/android-training...原创 2020-04-12 23:24:13 · 413 阅读 · 0 评论 -
System UI Flag
简介在Android 3.0(11)之后,Android提供了setSystemUiVisibility方法,这个方法的作用是可以通过一个flag配置更改状态栏或其他屏幕/窗口装饰的可见性,主要的作用是暂时隐藏掉系统栏的一些UI,让用户能够将注意力更多地集中在应用程序内容上。注意,在使用的时候,有一些flag不一定是API 11 就支持的。大部分都是在API 16的时候增加上的。这种方式设置...原创 2020-04-06 23:36:23 · 620 阅读 · 0 评论 -
Window Flag 含义
简介WindowManager.LayoutParams 是用于向WindowManager 描述Window窗口的相关展示策略,它继承自于 ViewGroup.LayoutParams,在我们日常的开发中,肯定会或多或少用到其中的一些主要成员常量,特别是做跟全屏显示相关的业务,譬如视频或者是阅读器,更是会经常用到。这里主要介绍一下,一些常用的Flag 的相关含义,方便开发中使用。常用Fl...原创 2020-04-06 17:05:27 · 2003 阅读 · 0 评论 -
高效开发小结
背景作为一枚稍微还有点追求的程序猿,在日常工作的过程,经常会想去研究下怎样才能高效完成工作和有所成长,不至于成为一个只会写代码完成任务的机器。主要是两个方面:a)、工作拆解合理,排期明确,逐步提高风险把控能力;b)、方便总结、反省,进行优化;在摸索过程中,除了需要在日常工作中刻意去思考外,也发现了几款比较好用的软件,推荐结合使用。思考需要对自己需要提升的能力,理出一份对应的指南,...原创 2020-03-01 17:42:43 · 275 阅读 · 0 评论 -
文件句柄和文件句柄泄漏解决
文件句柄在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据。要从文件中读取一块数据,应用程序需要调用函数readFile,并将文件句柄在内存中的地址和要拷贝的字节数传送给操作系统。当完成任务后,再通过调用系统函数来关闭该文件。...原创 2019-12-22 12:07:53 · 3965 阅读 · 0 评论 -
Litho介绍和原理分析
一、Litho简介Litho是Facebook推出的一套高效构建Android UI的框架,主要目的是提升RecycleView复杂列表的滑动性能和内存占用。官网原文介绍如下:“Litho is a declarative framework for building efficient user interfaces (UI) on Android. It allows you to wr...原创 2019-12-16 23:08:01 · 5687 阅读 · 0 评论 -
Github 下载文件夹方法
背景有时候GitHub上的工程很大,而我们只需要其中的一部分文件,这个时候整个clone 下来耗时长不说,还占用空间,所以就有了这样子的诉求:下载某个文件夹。下载方式一、GitZip for github如果你使用的是 Chrome 的话,可以用 GitZip for github 这个插件。下载安装之后,直接双击需要下载的Github 工程的文件夹,就会弹出下载弹框让你下载。使用...原创 2019-12-13 22:59:08 · 5306 阅读 · 1 评论 -
任务调度框架(多任务、动态优先级调度)
背景日常开发的过程中,对于某个状态变更的监听,一般都是使用注册listener的方式,在状态变更的时候,遍历注册的listener一一进行通知,这种情况,经常会出现一些任务扎堆执行的情况,譬如登录完成(或者其他类似的通知监听),如果一个APP里面有很多的业务,每个模块都注册了监听,在登录状态变更的时候,会去获取更新数据或者干一些业务相关的逻辑。这种情况下这种实现方式会存在以下几个问题:1、通...原创 2019-12-08 23:09:48 · 3349 阅读 · 0 评论 -
UI空闲时回调-MessageQueue.IdleHandler
背景我们的在业务开发的过程中,可能会遇到这样子的情况,需要再UI线程空闲的时候,做一些操作,那应该怎样子实现呢?MessageQueue.IdleHandlerMessageQueue给我们提供了一个IdleHandler的接口,其定义如下: /** * Callback interface for discovering when a thread is going to...原创 2019-12-08 17:57:03 · 617 阅读 · 0 评论 -
Android xml onClick原理
背景 <Button android:onClick="handleAction" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点击"/>我们在写布局的时候,经常会给一个控件加上an...原创 2019-12-06 21:20:36 · 984 阅读 · 0 评论 -
Lottie源码分析
简介我们使用Lottie的时候,最关键的类就是LottieAnimationView(继承自ImageView)和LottieDrawable(继承自Drawable),Lottie的描述文件最终会解析成一系列的Layer,然后在绘制的时候,根据不同的进度,绘制Layer的不同帧。JSON描述文件在分析源码之前,我们需要先认识一下,加载的json 文件的数据结构是怎样的。比较重要的有三层,...原创 2019-12-01 23:29:03 · 480 阅读 · 0 评论 -
Lottie使用
一、简介Lottie是Airbnb开源的一个动画渲染库,支持多平台,包括iOS、Android、React Native以及Web。Lottie动画的制作流程如下:设计师通用After Effects 制作动画,然后通过Bodymovin插件导出对应的json文件,给到每个端的研发,然后进行编译展示。官网地址GitHub地址二、简单使用1、依赖引入build.gradle ...原创 2019-12-01 12:16:55 · 2753 阅读 · 0 评论 -
ImageView显示长图
显示长图失败我们知道,ImageView经常用来显示一些位图,但是不是所有的图片都能够正常显示的,很明显不是的,当图片超过了一定的大小之后,你会发现,调用setImageBitmap(Bitmap bitmap)方法之后,图片没有正常显示出来,并且可显示的区域也没有显示对应的图片,这是为什么呢?测试做了一个实验,将一个如图大小的Bitmap设置给ImageView,图片没有显示出来,并且出现...原创 2019-11-30 11:53:30 · 2160 阅读 · 0 评论 -
Xposed的使用(二)
背景在上一篇文章介绍了Xposed的使用,但在反编译自己编写模块的过程中,发现对于一些常用用法方面资料还是比较缺乏,在使用的过程中还得不过google,因此在这里小结了一下这个框架常用的一些方法。查找操作常用hook方法实现public class CommonHookModule implements IXposedHookLoadPackage {private String...原创 2019-11-30 11:52:14 · 830 阅读 · 0 评论 -
Xposed的使用(一)
简介Xposed是 Android 平台上很出名的一个hook开源框架,使用这个框架我们可以Hook Android系统的核心进程Zygote来达到修改应用程序的运行过程和结果,本篇文章主要介绍怎样通过Android Studio来编写插件给Xposed来实现自己想要的拦截效果。使用安装xposed_install首先需要安装xposed_installer框架,因为需要劫持系统,所以要求...原创 2019-11-30 11:50:54 · 599 阅读 · 0 评论 -
Ndk配置(Mac)
下载下载NDK有以下两种方式1、使用AndroidStudio里面的SDK Manager,一般下载安装的时候顺便将CMake也一并安装,这种方式操作简单方便,但缺点也比较明显,只能下载最新版本的,不能选择其他的版本2、官网下载: https://developer.android.com/ndk/downloads/ ,能够按照自己的需要下载对应的版本。环境变量配置下载完...原创 2019-11-30 11:50:01 · 2988 阅读 · 0 评论 -
VirtualHook使用
背景想要逆向分析其他应用,除了需要有smali语法功底外,一套好用的良好的逆向装备也是必不可少的,并且当我们想要更加深入去了解一款app的实现的时候,可能还需要用到调试、替换(修改原有的逻辑),解决方案有很多种,这里推荐使用apktool + jadx + virtualhook,apktool解决资源文件的问题,jadx解决反编译查看代码的问题,virtualhook解决热替换的要求。环...原创 2019-11-30 11:48:53 · 1151 阅读 · 0 评论 -
360脱壳
背景在反编译app的时候,有时候会遇到一些加固了的app,这样子我们做竞品分析的时候,就无法使用apktool或者jadx进行反编译了,APK加固成为我们分析的障碍。360渠道作为Android应用分发的较大渠道,很多apk都使用了360加固。本文就来介绍下如何来绕过这个坑。360加固后的apk,在arm设备上首先会将assets目录下的libjiagu.so拷贝到files目录下,然后通过l...原创 2019-11-30 11:47:30 · 1732 阅读 · 0 评论 -
Room使用介绍
简介在2017年Google IO大会上推出的官方数据框框架,其实际上就是对SQLite做了一层封装。基本原理是通过编译期注解,根据你配置的表名和表字段生成对应的代码,减少开发者的工作量。使用1、添加Room依赖dependencies { api "android.arch.persistence.room:runtime:$1.1.1" annotationProcessor "...原创 2019-11-30 11:46:25 · 1935 阅读 · 0 评论 -
游戏2048的实现
package com.ccg.mygame2048;import java.util.ArrayList;import java.util.List;import android.app.AlertDialog;import android.content.Context;import android.content.DialogInterface;import android.原创 2015-04-19 12:22:15 · 1302 阅读 · 0 评论 -
Vmware 11.0下面安装Ubuntu14.04
在Windows下面安装Ubuntu,步骤如下:1、下载VMware和Ubuntu。可以直接到官网下载:VMware :http://www.vmware.com/cn/Ubuntu: http://www.ubuntu.com/download/desktop/不过下载VMware 的话,需要注册什么的,比较繁琐,这里提供一个链接,里面的压缩包含有上面这两个安装包,是VM原创 2016-01-11 22:23:33 · 1603 阅读 · 0 评论 -
Ubuntu下中文输入法的安装
在安装完Ubuntu系统之后,可能会出现不能使用中文输入法的情况,因为多次装Ubuntu遇到这种情况,因此记录一下,方便以后查看。 首先,1、安装IBus框架,在终端下面输入一下命令,sudo apt-get install ibus ibus-clutter ibus-gtk ibus-gtk3 ibus-qt42、启动IBus框架,在终端输入im-switch -s ibus原创 2016-01-11 21:28:21 · 640 阅读 · 0 评论 -
Win7下面更改屏幕旋转快捷键的方法
打开控制面板-----选择【因特尔图形和媒体】----【选项和支持】----【快捷键管理器】,在弹出的右边的框框那里修改即可。原创 2016-01-10 19:57:57 · 2360 阅读 · 0 评论 -
Android Studio中文字体显示乱码
在使用Android Studio的时候,可能会遇到这样子的情况,在import工程的时候,中文的目录显示异常,如下:在设置里面也会出现这样子的情况:为什么会出现这样子的问题呢?其实原因很简单,因为默认的字体是不支持中文的,所以中文字体显示的都是乱码,解决方法如下:按住Ctrl+Alt+S,调出Setting设置界面,按照上面勾选,并选择一种中文的字体即可,使用原创 2016-01-08 10:23:26 · 1352 阅读 · 0 评论 -
Android Studio 中文字体显示乱码
在使用Android Studio的时候,可能会遇到这样子的情况,在import工程的时候,中文的目录显示异常,如下:![这里写图片描述](http://img.blog.csdn.net/20160108101017849)在设置里面也会出现这样子的情况:![这里写图片描述](http://img.blog.csdn.net/20160108101210927) 为什么会出现这样子的问题呢原创 2016-01-08 10:19:26 · 1893 阅读 · 1 评论 -
使用ADB进行流量统计
流量测试的原理:在安卓手机上,应用的网络流量数据都会保存在系统的/proc/uid_stat/$UID/tcp_rcv 和/proc/uid_stat/$UID/tcp_snd两个文件夹里面,一个是请求耗费的流量,一个是接受的数据流量,这两个数据是由系统记录的,在我们启动某个软件的时候,系统会根据这个应用所占用的进程号pid在根目录下创建一个以这个命名的文件夹,在文件夹的下面有存有UID的文件,如原创 2015-10-15 20:57:48 · 9800 阅读 · 0 评论 -
重写onDraw,却不正常执行绘制的原因
一.引言:想必大家以前也遇到过这个问题:出于项目的需要,我们有时需要新建一个直接或者间接继承View的类,以便复写View提供的onDraw()方法,但有时我们反而得不到我们想要的结果,今天就说一下onDraw()方法不被执行的解决方法。你可能也在onDraw()方法里面设置了断点或log,却发现程序并没有执行onDraw()方法,那么你需要在你直接或者间接继承View的类的构造函数中加入转载 2015-10-12 16:01:44 · 1702 阅读 · 0 评论 -
Window下安装Rational rose
1 .首先下载对应的文件。链接:链接:http://pan.baidu.com/s/1dFjYMEd 密码:ugb92 .先安装虚拟光驱。3. 运行安装好的虚拟光驱,点击添加下面的第一个按钮,添加完成之后会在下面增加多一个设备,也是显示无媒体,双击,找到你的bin文件,点击即可加载。然后选择安装程序进行安装即可。原创 2016-06-21 18:42:02 · 623 阅读 · 0 评论 -
Scheme打开Activity
打开Activity的两种方式打开Activity的方式基本可以分为两大类,显示打开和隐式打开。显示启动 Intent intent = new Intent(); intent.setClassName(getPackageName(), getPackageName() + ".SecondActivity"); startActivity(intent);隐...原创 2019-01-08 00:23:49 · 1157 阅读 · 1 评论 -
EventBus 使用及源码分析
一、简介EventBus,Android和Java的发布/订阅事件总线,用于简化组件之间的通信方式。在我们传统的写法中,Activity之间的通信使用Intent,Service跟Activity之间使用广播broadcast,Fragment和Activity之间会相互持有对方的引用, 这类方式的问题在于:通信方式没有实现解耦,一旦我们的组件发生了变化,对应的通信方式就需要跟着修改,因此为...原创 2019-03-30 22:34:06 · 238 阅读 · 0 评论 -
Android消息机制
整体架构图是什么?组成HandlerMessageQueue原创 2019-04-07 23:36:12 · 162 阅读 · 0 评论 -
Epub格式介绍
META-INFminetypeOEBPS原创 2019-04-21 18:04:28 · 4256 阅读 · 0 评论 -
Epub文件解析库-- Epublib
介绍epublib是一个比较强大的Epub 文件解析库,同时也支持Epub文件的生成,本篇文章会对其做一个详细的介绍。相关资料项目地址https://github.com/psiegman/epublib官方api文档http://www.siegmann.nl/static/epublib/apidocs/官网http://www.siegmann.nl/epublib使...原创 2019-04-24 08:08:41 · 3978 阅读 · 0 评论 -
【设计模式】--工厂模式
Java 的23中设计模式中,工厂模式一共有三种,分别是:简单工厂模式、工厂方法模式、抽象工厂模式,每种模式都有各自适合的场景,下面分别详细介绍。简单工厂模式简单工厂模式一般都是使用静态方法,通过接收的参数的不同来返回不同的实例对象。实例:编写一个计算器,具有基础的加减乘除功能。首先定义基础运算类AbsOperate,里面有一个方法getResult(),用于返回计算结果,其次,需...原创 2019-05-04 15:04:14 · 199 阅读 · 0 评论 -
Android studio compiled code解决方案
不知从哪个时间点起,我的android studio就不能查看jar包里的源码了…这个过程是极其痛苦的:要想查看jar包里的源码,只能去网上找网页版的…给大家看一下我看到的okhttp源码是什么样的真的生无可恋了…每次研究了半天都没进展的话,我就放下继续去做手头的事了,直到最近有空研究下,才真正解决了这个问题。下面跟大家分享下,这里就暂时不记录过程了。安装反编译工具jd-inteII...原创 2019-05-04 15:10:43 · 2923 阅读 · 0 评论 -
Epub解析 -- Pageturner
上一篇文章介绍了Epub文件的格式,了解了其内部的结构,这一篇文章就来讲讲,怎样解析Epub文件。目录章节内容原创 2019-05-12 22:27:44 · 1425 阅读 · 0 评论 -
Sharepreferences 使用和实现分析
是什么Android平台用于存储轻量级数据的存储方式,以键值对(key-value)的方式来进行存储,本质上是一个xml 文件。怎么用存1、通过Context,获取SharedPreferences对象;2、创建SharedPreferences.Editor对象;3、写入数据并执行commit操作;Context context;SharedPreferences sharedP...原创 2019-06-16 22:43:42 · 6896 阅读 · 0 评论 -
View相关知识学习(一)
觉得UI这方面挺重要的,也非常感兴趣,因此,接下来的一系列文章都会跟这方面相关。这一篇记录的可能会比较简单,是自己之前学过但是没有做一个比较完整的整理,所以先整理一下一些比较零碎的知识点。 1、在自定义控件的时候,比较规范的是,在资源文件里面写好相关的属性,然后可以直接应用,例如,可以在res里面创建一个attrs文件,格式如下,详细的可以参考API的相关介绍。2、下面这个可以是为原创 2015-10-12 08:38:13 · 588 阅读 · 0 评论 -
类图工具安装
下面是自己亲身实践的安装过程,记录一下,希望能够帮助有需要的人。 首先下载资源文件。这里提供一个下载路径:http://pan.baidu.com/share/link?shareid=467021&uk=421719222 解压之后会得到一个BIN文件,如果电脑里面没有打开这类文件的软件,可以下载一框叫daemon_tools_Lite_4.4.71的软件,安装之后点击左下角原创 2015-10-23 13:48:18 · 763 阅读 · 0 评论 -
多线程断点下载详解
首先先理清一下逻辑,后面会贴上源代码,里面有详细的解释,根据前面的逻辑去看后面的源码能够很快掌握断点下载。续传也是同样的道理。看源码之前需要了解的知识:使用Http的Range头字段可以指定每条线程从文件的什么位置开始下载,下载到什么位置为止,如:指定从文件的2M位置开始下载,下载到位置(4M-1byte)为止,代码如下:HttpURLConnection.setRequestProperty原创 2015-05-02 16:10:21 · 1353 阅读 · 1 评论