Android
文章平均质量分 66
android
Forget_Sky
这个作者很懒,什么都没留下…
展开
-
Android自定义View
为什么要自定义View大多数情况下,开发者常常会因为下面四个原因去自定义View:让界面有特定的显示风格、效果 让控件具有特殊的交互方式 优化布局 封装让界面有特定的显示风格、效果默认情况下,Android系统为开发者提供了很多控件,但有时,这并不能满足开发者的需求。例如,开发者想要用一个饼状图来展示一组数据,这时如果用系统提供的View就不能实现了,只能通过自定义View来实现。让控件具有特殊的交互方式默认情况下,Android系统为开发者提供的控件都有属于它们自己的特定的交互原创 2021-04-15 17:25:51 · 297 阅读 · 0 评论 -
View的构造函数
View的构造函数构造函数参数最多有四个。View(Context)View(Context, AttributeSet)View(Context, AttributeSet, defStyleAttr)View(Context, AttributeSet, defStyleAttr, defStyleRes) Context- View中随处都会用到。 AttributeSet- XML属性(当从XML inflate的时候)。 int defStyleAtt..原创 2021-04-15 16:43:57 · 329 阅读 · 0 评论 -
View的渲染机制
首先,用一句话来概括一下Android应用程序显示的过程:Android应用程序调用SurfaceFlinger服务把经过测量、布局和绘制后的Surface渲染到屏幕上。SurfaceFlinger:Android系统服务,负责管理Android系统的帧缓冲区,即显示屏幕。Surface:Android应用的每个窗口对应一个画布(Canvas),即Surface,可以理解为Android应用程序的一个窗口。Android应用程序的显示过程包含了两个部分(应用侧绘制、系统侧渲染)、两个机制(进程.原创 2021-04-14 19:35:28 · 735 阅读 · 0 评论 -
View的绘制流程
1.整体流程View 绘制流程从ViewRootImpl的setView()方法开始//ViewRootImpl public void setView(View view, WindowManager.LayoutParams attrs, View panelParentView) { // Schedule the first layout -before- adding to the window // mana原创 2021-04-12 11:02:44 · 246 阅读 · 0 评论 -
Activity的启动流程
1. Application启动流程AMS通过socket请求zygote创建进程, 然后反射创建ActivityThread,调用其main()方法public final class ActivityThread extends ClientTransactionHandler { //初始化ApplicationThread final ApplicationThread mAppThread = new ApplicationThread(); //初始原创 2021-04-02 18:33:01 · 584 阅读 · 0 评论 -
View事件分发
1.事件的源头在哪里Android系统中将输入事件定义为InputEvent,而InputEvent根据输入事件的类型又分为了KeyEvent和MotionEvent,前者对应键盘事件,后者则对应屏幕触摸事件,这些事件统一由系统输入管理器InputManagerService进行分发。在 SystemServer.startOtherServices中会启动 IMS(InputManagerService)和WMS(WindowManagerService),InputManagerService会开启原创 2021-04-01 13:18:33 · 1473 阅读 · 4 评论 -
android依赖包的maven私服发布及使用
1. 依赖包的发布(1)在待发布的module中build.gradle中的添加以下配置:apply plugin: 'com.android.library'android { compileSdkVersion 30 buildToolsVersion "29.0.3" defaultConfig { }}dependencies { implementation fileTree(dir: "libs", include:.原创 2021-03-30 18:44:22 · 317 阅读 · 0 评论 -
Android API 28+ View监听按键事件的处理方式
API28之前:view.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { return true; }});API28与28+:ViewCompat.addOnUnhandledKeyEventListen.原创 2021-03-20 23:01:28 · 414 阅读 · 0 评论 -
Android版本适配
Android 版本适配6.0到8.0Android 系统各版本新特性总结Android 10适配要点,作用域存储Android 11新特性,Scoped Storage又有了新花样原创 2021-02-23 19:34:40 · 55 阅读 · 0 评论 -
Android四大组件之Activity--管理方式
1. 概览Activity的管理有静态和动态两层涵义: 静态是指Activity的代码组织结构,即Application中声明的Activity的集合,这些Activity被组织在一个APK中,有特定的包名。 在编写应用程序时,Activity对应到用户界面,它定义了用户界面的布局、交互行为、启动方式等,最重要的,是Activity的生命周期函数。 在应用进程看来,只需要按照Android定义的规范,实现生命周期函数的具体逻辑即可,所有的用户界面都遵循同一个规范。 编写完一个应用程序的所有用户界面转载 2021-01-13 19:15:14 · 1852 阅读 · 0 评论 -
替换apk中的文件然后重新打包签名
1.首先创建一个文件夹repack,用来存放接下来需要实现的内容2.这里以替换apk的assets目录中的文件为例进行说明:(1)创建一个assets目录,将要替换的文件拷贝到该目录里,文件夹目录结构需要和原始apk中的目录结构一致;(2)将签名文件放到data文件夹中;(3)创建一个output目录用来存放替换完成后最终生成的apk(4)下面就是最重要的一步了,写脚本,新建一个脚本文件repack.bat;最终的文件结构如下图所示:脚本文件如下:@echo off.原创 2021-01-01 17:31:32 · 3082 阅读 · 0 评论 -
Android图片模糊最佳实现,高性能,支持先压缩
直接上代码:public class BlurUtil { /** * 模糊图片 * @param context * @param bitmap * @param radius 模糊半径 * @param simple 缩小比例 * @return */ public static Bitmap blurImage(Context context, Bitmap bitmap, int radius, int s原创 2020-05-12 18:35:28 · 311 阅读 · 0 评论 -
全屏Dialog实现,布局可扩展到状态栏和导航栏
话不多说一看就懂,网上的大部分实现都没效果,用这个就对了public class FullScreenDialog extends Dialog { private View view; public FullScreenDialog(@NonNull Context context, View view) { super(context); this.view = view; } public FullScreenDialog(@N原创 2020-05-12 18:12:11 · 5185 阅读 · 1 评论 -
Android开发必备知识目录
目录1. Android2. Java必备知识3. 设计模式4. 数据结构/算法5. 其他1. AndroidAndroid知识图谱:我们到底需要学习哪些Android知识?1. 四大组件2. UI3. IPC4. 数据存储5. 多线程6. APK优化7. 网络通信8. 开源框架9. 多媒体10. Framework11. 混...原创 2020-04-27 19:04:47 · 788 阅读 · 0 评论 -
知识体系&面试集锦
2020年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂快手,字节跳动,百度,美团Offer之旅2020精选Android中高级面试题 -- 终局之篇:高级干货2018 Android面试心得,已拿到offer2018今日头条Android面试Android面试题集合(持续更新)...原创 2020-04-29 09:39:41 · 66 阅读 · 0 评论 -
Android实现计时与倒计时的几种方法
方法一Timer与TimerTask(Java实现)public class timerTask extends Activity{ private int recLen = 11; private TextView txtView; Timer timer = new Timer(); public void onCreate(...转载 2018-12-05 11:35:41 · 127 阅读 · 0 评论 -
Android避免弹出大量Toast,长时间不消失,兼容Android9.0
解决Android 中Toast大量弹出,显示框长时间不消失问题通常我们会遇到需要弹出多个Toast的场景,由于Toast的显示逻辑是 等上一个Toast显示结束后,才会显示下一个,因此,当我们有多个Toast要显示的时候,就会造成Toast显示界面长时间不消失的问题;其实我们可以将Toast进行简单封装就可以解决这个问题。封装后的Toast工具类如下:public class...原创 2018-05-11 12:27:40 · 3542 阅读 · 0 评论 -
Android热点技术
1. 热修复原创 2020-04-30 12:18:17 · 92 阅读 · 0 评论 -
Handler引起的内存泄露解析
很多场景下需要我们在Activity中使用Handler来将更新UI的操作切换到主线程,这也是Handler最常用的使用场景,Handler使用虽然很简单,但是这句话,应该很多人都不陌生“This Handler class should be static or leaks might occur”,那么为什么会有这样的内存泄露警告呢?1. 在Java中,非静态内部类和匿名内部类都会隐式地持...原创 2018-09-19 13:58:10 · 352 阅读 · 0 评论 -
各种典型场景下Activity的生命周期
1. Activity正常启动:onCreate -> onStart -> onResume2. Activity启动另一个Activity:(1)B完全遮挡住AA:onPause -> B:onCreate -> B:onStart -> B:onResume -> A:onSaveInstanceState-> A:onStop此...原创 2018-09-19 18:38:11 · 1155 阅读 · 0 评论 -
Android版本更新适配
1. 权限适配Android 8.0适配指北Android 7.0脱坑指南Android 7.0 行为变更 通过FileProvider在应用间共享文件吧Android全面屏虚拟导航栏适配PopupWindow 在 Android N(7.0) 的兼容性问题Android通知栏介绍与适配总结...原创 2020-12-14 10:48:04 · 53 阅读 · 0 评论 -
Android多媒体(图片/视频)
(1)几大图片加载库的比较https://www.cnblogs.com/fightingchendan/p/5972985.htmlhttps://blog.csdn.net/lgzaaron/article/details/51958272(2)图片加载框架GlideGlide 4的用法http://blog.csdn.net/guolin_blog/article/det...原创 2020-05-21 10:20:27 · 72 阅读 · 0 评论 -
Android四大组件
(1)Activity各种典型场景下Activity的生命周期Activity的状态保存和恢复Activity横竖屏切换配置Activity的启动模式彻底弄懂Activity的启动模式和任务栈Activity启动模式与任务栈(Task)全面深入记录(上)Activity启动模式与任务栈(Task)全面深入记录(下)我一行代码都不写实现Toolbar!你却还在封装Ba...原创 2020-03-30 17:42:25 · 116 阅读 · 0 评论 -
Android UI
(1)View事件分发机制深入浅出解析Android事件传递机制(2)自定义View手把手教你写一个完整的自定义View自定义View,有这一篇就够了(3)view渲染深入Android渲染机制Android View绘制和显示原理简介(4)动态布局Android 动态添加布局(layout)和控件(Widget)(5)SurfVi...原创 2020-10-12 17:49:31 · 128 阅读 · 0 评论 -
Android IPC
(1)进程间通信方式几种进程通信方式的对比总结(2)Binder机制Android Binder之应用层总结与分析(3)AIDL机制进程通信之 AIDL 的使用(4)序列化序列化与反序列化之Parcelable和Serializable浅析针对工作中的需要对已有的Java序列化工具分析(5)Android进程分类Android进程分类...原创 2020-12-09 16:40:22 · 89 阅读 · 0 评论 -
Android 数据存储
(1)Android中数据存储方式Android数据存储五种方式总结详解Android数据存储技术(2)ContentProvider线程安全问题(3)LRUCache原理彻底解析Android缓存机制——LruCacheLruCache 实现原理分析(4)数据库升级,数据迁移问题对数据库的迁移我们需要做一下几个步骤: ① 创建临时表,将原来的数据复制到临时表...原创 2020-10-20 18:32:54 · 72 阅读 · 0 评论 -
Android 多线程
(1)Android中子线程真的不能更新UI吗Android中子线程真的不能更新UI吗?(2)Android消息机制Handler源码分析handler扩展:Android 消息机制——你真的了解Handler?Handler引起的内存泄露解析(3)HandlerThread多线程之HandlerThread 完全详解HandlerThread 使用场景...原创 2019-05-09 12:20:56 · 88 阅读 · 0 评论 -
Android Framework
(1)Android的整体架构图(2)Android启动过程(3)App启动流程https://blog.csdn.net/qian520ao/article/details/78156214(4)应用安装过程(5)动态权限适配方案,权限组的概念(6) AndroidStudio的build按钮后发生了什么(7)Dalvik、ART虚拟机(8)Andro...原创 2020-10-29 10:15:53 · 91 阅读 · 0 评论 -
Android H5+native混合开发
1. Hybrid App技术解析 -- 原理篇2.Android:你要的WebView与 JS 交互方式 都在这里了3. Android:这是一份全面 & 详细的Webview使用攻略4. android与js的交互之jsbridge使用5.Android WebView中shouldOverrideUrlLoading方法的一些坑6. WebView的url跳转...原创 2019-10-08 13:30:10 · 183 阅读 · 0 评论 -
APK打包优化-图片、资源、so、混淆
1. 图片优化(1) 图标使用矢量图(svg转成android支持的vector)vector 5.0+兼容配置android { defaultConfig { vectorDrawables.useSupportLibrary = true } } //app:srcCompat替换android:srcapp:srcCompat...原创 2020-04-27 15:19:34 · 699 阅读 · 0 评论 -
Ubuntu下JDK,SDK, Gradle配置
配置之前下载好需要的版本,解压到自定义目录下,然后在 .bashrc文件中添加如下内容,注意替换自己的文件目录:#export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64export JAVA_HOME=/usr/lib/jvm/java-8-oracleexport JRE_HOME=${JAVA_HOME}/jreexport CLASS...原创 2018-07-30 18:02:53 · 384 阅读 · 0 评论