
Android
文章平均质量分 72
joye123
这个作者很懒,什么都没留下…
展开
-
移动应用项目架构设计
将界面分为界面元素(例如TextView)和界面状态(例填充TextView的数据)。UDF可为状态提供周期建模,还将”状态变化来源位置“、”转换位置“、”最终使用位置“分离开来。按照分层的架构思想,从下到上分为ShareLib(共享库)层、Core(核心功能)层、Business(业务逻辑)层、App(应用展示)层。在数据层将业务逻辑与数据访问通过接口隔离,可以方便的替换底层的数据访问实现。状态的更改遵循明确定义的模式,即状态更改是用户事件及其数据拉取来源共同作用的结果。将逻辑分为界面逻辑和业务逻辑。原创 2023-07-31 18:03:21 · 482 阅读 · 0 评论 -
OpenGL渲染视图种类及使用场景区别
SurfaceView SurfaceTexture TextureView 区别原创 2022-10-25 11:33:49 · 454 阅读 · 1 评论 -
Android Q(10)系统上的异常生命周期事件
Android10系统上因windowIsTranslucent引起的生命周期异常原创 2022-08-22 16:06:15 · 1047 阅读 · 0 评论 -
Android事件输入和传递系统
Android事件输入和传递系统事件的产生和传递按键事件触摸事件鼠标事件轨迹球事件InputEvent 输入事件的基类,派生两个类型的子类KeyEvent和TouchEvent。整个事件处理流程如下:事件采集(由Linux驱动支持) -> 前期处理(提取有用信息) -> WindowManagerService分发 -> 应用程序处理这里主要搞清楚两个问题:1、输入事件是怎么监听到的?2、监听到事件是怎么分发到应用程序中的?InputManagerService原创 2021-05-22 11:34:27 · 707 阅读 · 5 评论 -
Android中的四大组件详解
Android中的四大组件详解我们都知道Android系统应用层框架中,为开发者提供了四大组件来便于应用的开发,它们是Activity、Service、BroadcastReceiver、ContentProvider。它们用于在应用开发过程中,不同场景的功能实现。Activity:Activity是开发中最常用的,也是最复杂的一个组件。它是用户可以专注做一些事情的东西。它的主要功能就是可以和用户进行交互操作,所以几乎所有的Activity都会负责创建一个显示窗口,然后通过setContentView原创 2021-04-27 12:05:17 · 5984 阅读 · 1 评论 -
BroadcastReceiver详解
BroadcastReceiver详解使用方式在Manifest.xml文件中注册<receiver android:name=".test.broadcast.MyTestReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.intent.action.ACTION_POWER_CONNEC原创 2021-04-01 11:49:09 · 739 阅读 · 0 评论 -
Bitmap详解
Bitmap详解我们都知道,在显示图片时,可以图片文件解析为Bitmap,然后交给ImageView控件去展示。所以,Bitmap就代表了一张解码后的,用于显示到屏幕上的图片数据。这里需要注意的是,一张图片文件(无论从网络下载,还是从磁盘读取)是怎么显示到屏幕上的。图像的拍摄相机种类分为两大类:老式的胶片相机和新式的数码相机,他们的成像方式有很大的区别。胶片相机通过镜头将光线投影到胶片上,所以感光元件是胶片,胶片上有无数的银盐颗粒,越是专业的胶片颗粒越多,通过银盐颗粒的感光物理属性,将图像记录下原创 2021-01-28 19:05:20 · 2484 阅读 · 0 评论 -
解决通过WindowManager添加的View无法响应返回按键
解决通过WindowManager添加的View无法响应返回按键最近在测试是否能够在子线程中操作UI问题时,发现通过WindowManager的addView(View view, ViewGroup.LayoutParams params)方法在当前线程添加一个View后,点击物理返回按键没有反应。代码如下:public void addViewByWM(Context context) { View rootView = LayoutInflater.from(context).inflate(R原创 2020-10-30 18:31:07 · 2980 阅读 · 2 评论 -
ThreadLocal应用与实现
ThreadLocal应用与实现什么是ThreadLocal以及如何使用ThreadLocal 直译过来就是线程本地变量的意思。它是一个容器类,可以存入其他对象类型。它的作用就是控制多个线程对同一个ThreadLocal变量读取和写入时,可以做到相互独立,互不影响。并且对多次get()操作返回的值是同一个。ThreadLocal有两种初始化方式:使用ThreadLocal的set(Object)方法设置初始值。重写initialValues()方法,返回初始值。当调用get()方法获取值时,如原创 2020-08-18 19:02:45 · 714 阅读 · 0 评论 -
使用系统分享功能分享到微信的问题
在这里记录一个小问题,在直接使用系统分享功能,即设置Intent的Action为Intent.ACTION_SEND,分享图片到微信好友时,当微信处于打开的状态时,只能唤起微信,而不能选择分享好友选择列表。代码如下:public static Intent shareImageToOtherApp(Context context, File imageFile) throws Exception { if (context == null || imageFile == null || !原创 2020-06-17 18:57:34 · 1063 阅读 · 0 评论 -
Android中的智能指针
Android中的智能指针C/C++项目中常见的指针问题有三类:指针没有初始化,或者新申请的内存块没有按照情况进行初始化。new/delete操作符没有匹配使用,忘记delete造成内存泄漏。野指针。一个对象不知道有多少个指针引用它,当对象被在错误的时机销毁时,引用它的指针就变成了野指针。为了解决上面三个问题,智能指针被发明了出来。智能指针,简单来说就是通过引用计数法记录一个对象被...原创 2020-03-19 18:40:02 · 675 阅读 · 0 评论 -
Android gradle 统一依赖库版本
Android gradle 统一依赖库版本方式一将依赖库放在一个单独的全局配置文件中,然后在各个模块的build.gradle文件中读取配置文件的依赖方式二在各个moudle中的build.gradle文件配置需要统一的依赖库版本号 configurations.all { resolutionStrategy { ...原创 2018-05-25 22:35:15 · 1954 阅读 · 0 评论 -
Android应用保活四步曲
Android应用保活四步曲本文针对国内手机厂商对于后台应用无法保活的限制下,用户还希望你的应用能在后台保持运行。ps:如果用户不给权限,除非加入系统白名单,否则你的应用会死的一干二净。第一步:利用Service类onStartCommand()方法返回值public class YourService extends Service { @Override ...原创 2018-03-21 19:23:29 · 990 阅读 · 0 评论 -
Android 获取屏幕宽高的两种方式
Android 获取屏幕宽高的两种方式第一种WindowManager manager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); Display display = manager.getDefaultDisplay(); ...原创 2018-06-13 10:29:42 · 9044 阅读 · 0 评论 -
Android性能优化之UI卡顿优化
Android应用性能优化性能优化分类卡顿优化内存优化电量优化网络优化启动优化、安装包体积优化官网性能优化指导(https://developer.android.com/topic/performance/index.html)卡顿优化卡顿:从用户角度说,App操作起来缓慢,响应不及时,列表滑动一顿一顿的,动画刷新不流畅等等一些直观感受。从系统角度来说,屏...原创 2018-03-02 17:09:43 · 18605 阅读 · 1 评论 -
Binder概览
Binder概览翻译基础理论多任务、进程、和线程多任务是指同时执行多个程序或进程实例的能力。操作系统为每一个二进制执行文件创建了一份内存,包含了栈区、堆区、数据区和共享映射文件,他还分配了特殊的内部管理结构,叫做进程。操作系统必须提供公平的比例,因为同时只有一个进程可以使用CPU。所有进程都必须是可中断的,在他们的时间片内,操作系统会发送“睡眠”或“唤醒”信号给他们,这项工翻译 2018-01-10 10:26:44 · 464 阅读 · 0 评论 -
在Android中PX、DP(DIP)、SP、DPI、PPI的区别
在Android中PX、DP(DIP)、SP、DPI、PPI的区别先说比较简单的,PX、DP(DIP)和SP。PX的全称是Pixel,翻译过来是”像素“的意思,Pixel是由Picture和Element两个单词合并而来的,也就是图像的元素之意。比较准确的定义是:像素是指由一个数字序列表示的图像中的一个最小单位。一个数字图像就是一系列像素的集合,每个像素可以由各自的颜色值和具体的位置,通过...原创 2019-03-25 10:16:25 · 1892 阅读 · 0 评论 -
Android Studio 过滤不需要显示的log
平时我们使用Android studio查看logcat都是添加Fliters显示我们需要的TAG的日志输出。那么如何过滤掉我们不需要的TAG的日志输出呢? 使用场景: 我们需要查看好几个TAG的日志输出,单独过滤某个TAG肯定是不行的,而很多无用的日志刷屏出现,此时只能把刷屏出现的一个或多个TAG屏蔽掉。 解决方案: 跟平时设置过滤一个TAG的方式一样,只是添加Log Tag的转载 2017-11-03 14:12:04 · 2963 阅读 · 0 评论 -
Android中线程间通信机制Handler疑问解答
Android中线程间通信机制Handler疑问解答说起Handler的使用,几乎是开发者入门必备的开发技能。而且都会知道Handler配合一个Looper和MessageQueue来实现消息的创建、分发、处理。每一个Handler会绑定到创建它的线程以及一个消息队列。通过Handler,我们可以跟其他线程发消息实现线程切换,也可以给当前线程Handler发消息实现定时任务。...原创 2018-06-22 21:51:21 · 907 阅读 · 0 评论 -
关于Android7.x系统Toast显示异常BadTokenException解决方案
关于Android7.x系统Toast显示异常BadTokenException解决方案BadTokenException详细及原因Fatal Exception: android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@fcd9ef6 is...原创 2018-06-19 19:36:52 · 6295 阅读 · 1 评论 -
关于面向Android7.0及以上系统的应用无法通过charles抓包
关于面向Android7.0及以上系统的应用无法通过charles抓包默认情况下,来自所有应用的安全连接(使用TLS和HTTPS之类的协议)均信任预装的系统CA,而面向6.0及以下系统版本的应用默认情况下还会信任用户添加的CA证书。如果我们将targetSdkVersion修改到24以上的时候,应用则不会信任用户安装的证书了。详细说明见官方文档。这时,当我们通过charles或其他抓包...原创 2018-08-01 20:34:41 · 6631 阅读 · 0 评论 -
OkHttp 之 网络请求耗时统计
OkHttp 之 网络请求耗时统计OkHttp 3.11.0版本提供了EventListener接口,可以让调用者接收一系列网络请求过程中的事件,例如DNS解析、TSL/SSL连接、Response接收等。通过继承此接口,调用者可以监视整个应用中网络请求次数、流量大小、耗时情况。 使用方法如下: public class HttpEventListener extends Event...原创 2018-08-27 16:53:31 · 15280 阅读 · 7 评论 -
关于OkHttp3中publicsuffixes.gz的使用
关于OkHttp3中publicsuffixes.gz的使用publicsuffixes.gz中是一个压缩的文本文件,里面包含了目前公开的“公共后缀列表”。 关于“公共后缀列表”的解释如下:、“公共后缀”是指互联网用户可以(或历史上可以)直接注册名称的公共后缀。一些公共后缀的例子是.COM, .co.uk 和 pvt.k12.ma.us。公共后缀列表是所有已知公共后缀的列表。公共后缀...原创 2018-09-03 10:17:14 · 12387 阅读 · 0 评论 -
TCP和TLS/SSL会话细节
TCP和TLS/SSL会话细节TCP数据段格式说明TCP建立连接和断开连接细节Https如何保证通信安全一次Https网络请求通信细节网络数据包分析工具wireshark的使用问题:SYN、ACK、FIN具体含义是什么?TCP建立连接超时的表现?为什么需要证书来下发服务端公钥?客户端是如何验证证书合法性的?对称秘钥是如何协商出来的?为什么不直接让客户端自己生成一个秘钥发...原创 2018-10-08 15:05:07 · 16138 阅读 · 2 评论 -
上传Android库到JCenter
上传Android库到JCenter申请账号到Bintray这网站上申请一个账号,并获取到账号和秘钥。Bintray网站负责托管我们上传的jar包或aar包及版本信息。Bintray是JCenter源码库的托管网站,除了可以通过Bintray将依赖库文件发布到JCenter,还可以创建自己的Maven仓库。由于Maven对开发者不太友好,上传依赖库异常困难,所以Android Studio...原创 2018-11-28 15:40:50 · 453 阅读 · 0 评论 -
Android Gradle 使用Zip任务打包
Android Gradle 使用Zip任务打包背景:在一个项目中包含两个Module:一个主Module,一个库Module。主Module为库Module的调用示例。为了将主Module源码单独打包分发给外部用户,并且要保持项目结构不变且可直接运行,所以需要自定义一个打包任务来完成。需要打包的文件:rootDir/app/rootDir/build.gradlerootDir/set...原创 2019-05-14 10:39:16 · 3270 阅读 · 3 评论 -
Android中的RecyclerView源码分析
RecyclerView组件Adapter 提供数据以及数据变更通知LayoutManager 布局管理ItemAnimator Item变更动画关键实现1、ViewHolder复用三层缓存 第一层:Recycler中的mCachedViews第二层:ViewCacheExtension 由开发者实现的缓存策略,可通过setViewCacheExtension设置到Recycle原创 2016-08-16 13:18:00 · 2479 阅读 · 0 评论 -
Android安全–Dex文件格式详解
转载自http://www.blogfshare.com/dex-format.htmlAloneMonkey 2015年7月25日 0 Dex文件是手机上类似Windows上的EXE文件,dex文件是可以直接在Dalvik虚拟机中加载运行的文件。首先我们来生成一个Dex文件。新建文件Hello.java内容如下:class Hello{ public static void main(转载 2017-10-28 20:44:34 · 1261 阅读 · 0 评论 -
Android 7.0 安装包修改后无法安装
今天在我的Nexus6P(Android7.0)安装公司最新版App的时候,报错说“文件已损坏”。 后来通过命令行adb install尝试安装时,报错如下: Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Failed to collect certificates from /data/app/vmdl2097371921.tmp/base.apk原创 2016-10-11 15:26:10 · 18818 阅读 · 3 评论 -
Android 动画机制及实战
Android动画分类View Animation (视图动画,也叫补间动画)Frame Animation 帧动画Property Animation 属性动画(3.0后出现)补间动画原创 2016-09-21 15:42:22 · 266 阅读 · 0 评论 -
Android中Dex分包实践
一、定义1、(projectDir)/build/intermediates/multi-dex/release/manifest_keep.txt 该文件存储了AndroidManifest.xml文件中定义的Activity、Receiver、Application、Service、Provider等组件信息。 这个操作是在任务collectStoreReleaseMultiDexCompo原创 2016-08-10 17:07:05 · 1091 阅读 · 0 评论 -
Google VR 开发浅析
VR 是什么VR Virtual Reality 虚拟现实VR平台CardBoard 世界上最流行和最易用的手机VR平台DayDream 一个新的手机VR平台,低时延、更逼真、易交互。Google VR SDK https://developers.google.com/vr/android/VR SDK同时支持DayDream和CardBoard。 包含了一些用于创建App的简单原创 2016-08-23 12:04:43 · 5042 阅读 · 1 评论 -
由GridView(RecyclerView、ListView)首项重复绘制引起的探究
GridView的OnMeasure方法在不加载Adapter数据的情况下会重复调用3次。在Item布局不要求重绘的情况下,OnMeasure方法会调用四次。如果Item布局包含异步加载的ImageView,每次ImageView显示都会请求界面重绘,此时仍会调用N次OnMeasure方法。每次调用GridView的OnMeasure方法都会调用Adapter的getView方法一次,其中posit原创 2016-08-06 23:08:38 · 1272 阅读 · 0 评论 -
Android 7.0 拍照后剪裁
Android7.0 对app分享文件做了限制,不能直接分享file://开头的uri,必须转换成content://开头的。我们在相机拍照完成后得到图片本地路径后localImagePath,利用FileProvider的getUriForFile方法生成Uri后,在利用Intent开启”com.android.camera.action.CROP”剪裁程序,报错:无法修改低于50x50像素的照片原创 2016-08-30 16:58:27 · 4584 阅读 · 2 评论 -
Retrofit2 源码分析
什么是Retrofit A type-safe HTTP client for Android and Java 一款在Java和Android平台上使用的类型安全的Http客户端Retrofit的特点将API请求转化为接口,具体的接口方法代替各个API使用注解标记请求方法类型、参数类型支持Multipart和文件上传将返回结果转化为对象,并可自定义数据转化器提供异步请求方式原创 2016-07-22 16:54:25 · 442 阅读 · 0 评论 -
ViewPager源码解析
ViewPager的滑动手势冲突解决方案所有解决滑动冲突的方法都避免不了要从 DispatchTouchEvent(MotionEvent ev); 事件分发 OnInterceptTouchEvent(MotionEvent ev); 事件拦截 OnTouchEvent(Motion ev); 事件消费 这三个回调方法入手,搞明白这个三个方法之间含义和关系,Android系统中的事件传递就原创 2016-07-18 11:24:59 · 719 阅读 · 0 评论 -
Android那些事
1、使用javah命令获取头文件时,报错“找不到android.graphics.Bitmap”类。解决方案:在javah命令后面添加 -bootclasspath选项,来指定引导类的路径。这里的引导类为android-sdk/plateforms/android-23/android.jar转载 2016-07-07 15:45:25 · 510 阅读 · 0 评论 -
Android Train随堂记
Fragment添加到返回栈(BackStack),可以通过FragmentManager的getBackStackEntry(int index)获取指定位置的Fragment实例信息BackStackEntry。可以为Fragment回退栈添加监听addOnBackStackChangedListener(FragmentManager.OnBackStackChangedListener翻译 2016-07-05 11:59:20 · 550 阅读 · 0 评论 -
Android热修复
ClassLoader禁止dex优化为class打上CLASS_PREVERIFIED标识 第一步:新建辅助类并单独生成一个dex,用于被其他类引用 第二步:使用javaasist在其他类的构造方法添加对辅助类的引用 第三步:在加载apk时,优先加载辅助类dexbug修复后生成差异包将差异包添加到DexList前面原创 2016-07-14 16:08:37 · 628 阅读 · 0 评论 -
CoordinatorLayout + AppBarLayout + NestScrollView 向上滑动卡顿问题解决方案
问题描述在商品详情页使用CoordinatorLayout + AppBarLayout + NestScrollView布局组合展示。当向上滚动时,不会产生Fling效果,每当手指离开屏幕,布局就会停止滚动。当向下滚动时没有该问题。问题分析嵌套滑动的原理为由NestScrollView接收触摸事件并反馈到父视图,产生联动效果。猜测没有产生Fling效果的原因有可能是在NestScrollView原创 2016-11-07 22:30:47 · 10166 阅读 · 11 评论