自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 Android开发Gradle高级技巧,Android开发实用必备的几款插件

#!/bin/shapk源文件路径origin=$1output=$2java -jar ./signapk.jar ./platform.x509.pem ./platform.pk8 ${origin} ${output}####**2.开始编写我们的Task,与android{}同级**android{// …}// …//自定义的Tasktask autoSign {// 这个task执行会在assembleDebug之后执行dependsOn ‘assembleDeb

2021-09-09 23:46:54 250

原创 Android开发6年,Android面试题目

大体说清一个应用程序安装到手机上时发生了什么?Android的打包流程?apk里有哪些东西?签名算法的原理?说下安卓虚拟机和java虚拟机的原理和不同点?(JVM、Davilk、ART三者的原理和区别)安卓采用自动垃圾回收机制,请说下安卓内存管理的原理?Android中App是如何沙箱化的,为何要这么做?一个图片在app中调用R.id后是如何找到的?JNI请介绍一下NDK?三、Android优秀三方库源码你项目中用到哪些开源库?说说其实现原理?..

2021-09-09 23:45:16 271

原创 Android开发5年,分享下初级-中级-高级工程师-划分标准,进阶学习资料

深入理解Android动画原理,包括补间动画和属性动画。对于Android安全机制有基本认知,理解Android安全原理。深入理解端上设计范式思想,如mvc\mvp\mvvm\clean-arch等。理解架构演进,有良好的分层和拆分思路,掌握模块化、插件化、动态部署等。对新技术敏感(,理解掌握下一代架构dynamic feature等。如果达到这一水平,恭喜你,你已经超过70%左右的人,但是如果要再进一步,比如架构中/开发专家,那么除了理解Android的一些核心原理外,还需要具有架构设计能力.

2021-09-09 23:43:35 222

原创 Android应用架构的发展和实践,知识点总结+面试题解析

这个演变非常像后台应用的单体架构到微服务架构的演变,适用于公司内部有多个产品需要同时迭代的场景。随着单体应用向多Module的演变,原先的各个组件都独立到不同的Module中去了。大概有两个阶段:单一入口Module + 公共类库Module多入口Module + 多公共业务Module + 公共类库Module第一个阶段很好理解,也是一个自然而然的演变。因为项目中很多公共的模块,比如日志模块,网络模块,数据模块。这些模块与逻辑无关,可以给任何项目使用,所以单独开一个Module或者传到

2021-09-09 23:41:57 101

原创 Android应用架构的发展和实践,你想学的都在这里

[]()单体应用架构单体应用架构是指我们的项目在单Module时的架构,此时项目一般会划分一些层级,比如UI层,网络层,逻辑层。这些层级怎么进行组织呢?最开始,大家刚接触Android开发,统统是MVC。MVC的问题是布局文件作为View层,无法承担任何业务逻辑;UI的逻辑和业务逻辑都写在Activity层,在项目体量不大的时候这样完全没有问题。可是当每个页面的业务逻辑变成之前的2倍的时候,代码量也会增长一倍,这大大降低了项目的扩展性和维护性。这个时候可能你会通过抽取重构的方式来缓解这种局面,可是随

2021-09-09 23:40:20 62

原创 Android应用保活方案的另类出路,让你应用长生不老,实战案例

我们在来看一下那个判断,可以看到在之前的分类中如果强杀列表为空,或者是系统应用,或者是应用开启了自启动权限就不会强杀了,通过后面的一个判断的方法名我们可以猜测这个是自启动权限功能,可以去系统代码查看,这时候就需要去**/system/framework/framework.jar** 中查找系统类了:这里我们把系统类的framework.jar 弄出来解压出dex直接打开即可:看到这里是调用系统的APP_OPS 服务,所以我们去我们的项目中用反射的方式调用这个方法:

2021-09-09 23:38:31 3826

原创 全面理解-Flutter(万字长文,【性能优化实战】

从目前行业的产品,以及社区生态来说,React Native 整体还是胜出 Flutter 一筹。毕竟早出来几年,市场占有率和行业积累还是在的。但是长远来看,技术发展也有它的必然规律,Flutter 的技术理念已经领先了 React Native,作为大公司、或者大前端团队的技术储备和技术选型,科技公司要想在未来在行业有一席之地,使用 Flutter 这样的技术,必然也会是一个趋势。至于开发者对于技术本身,应该也会对 Flutter 保有浓厚的兴趣吧,毕竟技术永远都会向前发展,无论是谁,不进步一样会被淘汰。

2021-09-08 16:33:44 978

原创 入栈的Activity由于系统资源不足被被回收了怎么办,真香

应用中有一个活动 A,用户在活动 A 的基础上启动了活动 B,活动 A 就进入了停止状态,这个时候由于系统内存不足,将活动 A 回收掉了,然后用户按下 Back 键返回活动 A, 会出现什么情况呢?其实还是会正常显示活动 A的, 只不过这时并不会执行 onRestart()方法,而是会执行活动 A 的 onCreate()方法,因为活动 A 在这种情况下会被重新创建一次。这样看上去好像一切正常,可是别忽略了一个重要问题,活动 A 中是可能存在临时数据和状态的。打个比方,MainActivity 中有一个文

2021-09-08 16:32:10 300

原创 入木三分:从设计者角度看Retrofit原理,年薪60W必备

Retrofit.Builder().client(okHttpClient).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJava2CallAdapterFactory.create()).baseUrl(ApiConstants.BASE_URL).build() 很典型的构建者模式,可以配置OkHttp、Gson、RxJava等等,最后通过build()做构建操作,跟一

2021-09-08 16:30:40 67

原创 做了三年Android,还在等机会

数据结构和 HashMap 一样不允许 value 为 null线程安全ArrayMap、SparseArrayArrayMap1.基于两个数组实现,一个存放 hash;一个存放键值对。扩容的时候只需要数组拷贝,不需要重建哈希表2.内存利用率高3.不适合存大量数据,因为会对 key 进行二分法查找(1000以下)SparseArray1.基于两个数组实现,int 做 key2.内存利用率高3.不适合存大量数据,因为会对 key 进行二分法查找(1000以下)volatile 关键.

2021-09-08 16:26:50 130

原创 做了5年Android,rxjava面试题

Android中IPC方式、各种方式优缺点,为什么选择Binder?Binder机制的作用和原理?Binder框架中ServiceManager的作用?Bundle传递对象为什么需要序列化?Serialzable和Parcelable的区别?讲讲AIDL?原理是什么?如何优化多模块都使用AIDL的情况?View相关讲下View的绘制流程?MotionEvent是什么?包含几种事件?什么条件下会产生?描述一下View事件传递分发机制?如何解决View的事件冲突 ?举个开发中遇到的例子 ?s

2021-09-08 16:25:17 603

原创 做了3年大厂HR,这几种程序员我会直接pass掉,成长路线图

项目经验趋同看简历多了,会发现工作三年的人,简历上基本上都是CRM系统、商城、XX管理系统等。内部管理系统有这么火爆么?这一项并不能作为核心判断依据,也不会加分,暂时认为其做过,但如果有其他特征出现,则会pass掉。工作经验丰富,但工作低级作为工作三年左右的人,工作的事项,在项目中承担的责任还是权限管理、用户管理等功能。这就有很大问题了,要么是能力不够,要么是公司不行,要么就真的是简历有问题了。那么多丰富的技术栈,用来做权限管理和登录,实在可惜了。2.面试方面项目说不清楚面试时,基本上都是先让

2021-09-08 16:23:39 77

原创 Flutter学习指南:编写第一个应用,腾讯T3亲自讲解

这是个系列文章,后面还有很多篇,希望对大家能有帮助。Flutter 是 Google 推出的移动端跨平台开发框架,使用的编程语言是 Dart。从 React Native 到 Flutter,开发者对跨平台解决方案的探索从未停止,毕竟,它可以让我们节省移动端一半的人力。本篇文章中,我们就通过编写一个简单的 Flutter 来了解他的开发流程。这里我们要开发的 demo 很简单,只是在屏幕中间放一个按钮,点击的时候,模拟摇两个骰子并弹窗显示结果。我们撸起袖子开干吧。创建项目我们这里假定读者已经安装好.

2021-09-06 19:37:07 180

原创 Flutter仿钉钉考勤日历,成功入职腾讯

}原文:List _dayHeaders(TextStyle? headerStyle, MaterialLocalizations localizations) {final List result = [];for (int i = localizations.firstDayOfWeekIndex; true; i = (i + 1) % 7) {final String weekday = localizations.narrowWeekdays[i];result.add(Exc

2021-09-06 19:35:35 385

原创 Flutter-组件到底是什么?,retrofit教程

无论你是在 Android 还是 iOS 上工作,都要考虑自定义的 View 或 UIView,称为ListItemView。这个 ListItemView 在左边显示一个图标,然后在图标右边显示字幕上方的标题,最后在右侧显示一个可选附件:在定义这个自定义 View 的时候,你可以将每个对 View 的描述设为独立属性:myListItemView.icon = blah; myListItemView.title = “blah”; myListItemView.subtitle = “bl

2021-09-06 19:33:57 137

原创 Flutter-系列(四,阿里P8大佬整理

primaryColor: Colors.lightBlue[800],accentColor: Colors.cyan[600],),);**2.自定义主题**new Theme(// Create a unique theme with “new ThemeData”data: new ThemeData(accentColor: Colors.yellow,),);**3.使用主题**通过以上两种方式创建主题后,我们可以在Widget的build方法中通过Theme.o.

2021-09-06 19:32:14 72

原创 Flutter 网络请求框架封装,顺利通过阿里Android岗面试

import 'package:dio/dio.dart'; step 3:发起网络请求Get 请求void getRequest() async { Dio dio = new Dio(); var response = await dio.get("/test?id=12&name=chen"); _content = response.data.toString(); } 对于 query 参数,我们可以通过对象来进行传递,上面的代码等同于:voi

2021-09-06 19:30:29 237

原创 Flutter 布局控件完结篇,Android开发面试题

2. 单节点控件单节点控件,顾名思义就是只有一个节点的布局控件。这种控件有多少个呢,我之前文章总结过的有18种,现阶段还是不排除增加的可能,哈哈。2.1 分类在这小节里,我尝试从多个维度去对这些控件进行分类,希望这样可以帮助大家理解。2.1.1 按照继承划分[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mXEi0GY6-1630927723275)(https://user-gold-cdn.xitu.io/2018/9/26/16614cb3acc6a662?im

2021-09-06 19:28:54 129

原创 Flutter 完整开发实战详解自定义布局,“金三银四”春招指南

height, );}然后自定义 `RenderCloudWidget` 继承 `RenderBox` ,并混入 `ContainerRenderObjectMixin` 和 `RenderBoxContainerDefaultsMixin` 实现 `RenderBox` 自定义的简化。class RenderCloudWidget extends RenderBoxwith ContainerRenderObjectMixin<RenderBox, ...

2021-09-06 19:27:11 176

原创 Android进阶:三、这一次,两年Android开发经验

使用handler最简单的方式:直接new一个Handler的对象Handler handler = new Handler();所以我们来看看它的构造函数的源码: public Handler() { this(null, false); } public Handler(Callback callback, boolean async) { if (FIND_POTENTIAL_LEAKS) { final Class

2021-09-05 18:28:00 115

原创 Android进阶必学retrofit源码解析,安卓面试题2020

Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com/") .build();GitHubService service = retrofit.create(GitHubService.class);调用API方法,生成CallCall<List<Repo>> repos = service.listRepos("octocat");Retrofit的创建ret

2021-09-05 18:26:23 108

原创 Android进程框架:进程的创建,查缺补漏

ZygoteInit的入口函数就是main()方法,如下所示:public class ZygoteInit { public static void main(String argv[]) { // Mark zygote start. This ensures that thread creation will throw // an error. ZygoteHooks.startZygoteNoThreadC

2021-09-05 18:24:52 466

原创 Android超简单气泡效果,附带学习经验

refreshBubbles(); postInvalidate(); } catch (InterruptedException e) { System.out.println("Bubble线程结束"); break; } } }};mBubbleThread.start();}#### 1.4...

2021-09-05 18:23:16 511

原创 Android超简单气泡效果,绝对干货

如果当前圆的数量没有超过数量上限,则随机生成半径不同的圆。设定这些圆的初始位置。随机设定垂直向上平移速度。随机设定水平平移速度。不断的刷新圆的位置然后绘制。将超出显示区域的圆进行移除。不断重复。原理可以说非常简单,但是也有一些需要注意的地方,尤其是线程,最容易出问题。在原始的 demo 中,直接把线程创建和计算逻辑直接放到了 onDraw 里面,而且没有关闭线程,这自然会导致很多问题的发生。没有关闭线程会造成View的内存泄露,而把计算逻辑放在 onDraw 里面则会加大绘制的负担,拖慢刷新

2021-09-05 18:21:45 1292

原创 Android超实用最全面试大纲(二,2021程序员进阶宝典

1、Handler是什么Handler通过发送和处理Message和Runnable对象来关联相对应线程的MessageQueue2、Handler使用方法post(runnable)sendMessage(message)3、Handler工作原理Android进阶——Android消息机制之Looper、Handler、MessageQueenhttp://blog.csdn.net/qq_30379689/article/details/533940614、Handler引起的

2021-09-05 18:20:06 133

原创 Flutter _ 状态管理特别篇 ,你连原理都还没弄明白

和Scoped_model一样,Provide也是借助了InheritWidget,将共享状态放到顶层MaterialApp之上。底层部件通过Provier获取该状态,并通过混合ChangeNotifier通知依赖于该状态的组件刷新。Provide还提供了Provide.stream,让我们能够以处理流的方式处理数据,不过目前还有一些问题,不推荐使用。Lets do it!我们这里还是以一个简单app为例,详细介绍Provide的用法。其中涉及共享状态以及多个状态之间如何管理。[外链图片转存失败,源

2021-09-03 18:04:20 123

原创 Flutter _ 状态管理探索篇,2021Android开发社招面试总结

这里我们以一个最简单的CountApp举例,详细介绍Scoped_model的用法。该项目完整代码已放在github仓库。这是一个在不同页面使用Scoped共享状态信息的app。这两个页面都依赖于一个数字,这个数字会随着我们按下按钮的次数而增加。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ujk83uiI-1630663346547)(https://user-gold-cdn.xitu.io/2018/9/11/165c864da39b5296?imageslim)]

2021-09-03 18:02:37 118

原创 Flutter v1,大厂面试必问

中文字符 4401-校历.svg特殊字符非拉丁解决修改命名方式执行git revert 383e90eb13bdc50ca0cce9f2575329ba8593506e,回滚Flutter版本坐等官方发hotfix命名不规范,alex两行泪ios bitcode因为某些问题,现存的ios 项目无法开启 bitcode,但是v1.12.13中Flutter默认开启了这个,并且引擎也是enable bitcode了的。这个会导致整个项目无法编译成功。网上到处搜索了下,也问了一些ios大佬.

2021-09-03 18:01:03 176

原创 Flutter Text_ 扶我起来,2021最新版

overflowWidget: TextOverflowWidget( align: TextOverflowAlign.center, child: Container( child: Row( mainAxisSize: MainAxisSize.min, children: <Widget>[ const Text( '\u2026 ', style: Te...

2021-09-03 17:59:28 226

原创 Flutter ListView详解,全靠这套面试题

));}return new ListView( children: _list,);}### []()[]()ListView builder**builder** 顾名思义 构造 可以非常方便的构建我们自己定义的**child**布局,所以在**Flutter**中非常的常用。#### []()builder属性详细介绍//设置滑动方向 Axis.horizontal 水平 默认 Axis.vertical 垂直scrollDirection: Axis....

2021-09-03 17:57:42 149

原创 Flutter Interact 的 Flutter 1,程序员翻身之路

flutter build macos![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xODQ1MjUzNi1jYmY3ZDZlOWRiYTE2NmVlLnBuZw?x-oss-process=image/format,png)[]()二、更多开发工具----------------------------------------------

2021-09-03 17:55:55 145

原创 Freadhub Mac版它来了,Android开发三年月薪才12K

目前Flutter 2.0 Stable已支持MacOS,只需开启下MacOS支持即可。环境:Flutter SDK Flutter stable 2.0+开启MacOS支持:flutter config --enable-macos-desktop创建MacOS环境配置:flutter create --platforms=macos . % flutter --versionFlutter 2.2.0 • channel stable • https://github.com/flut.

2021-09-02 17:51:45 165

原创 FrameWork内核解析之PackageMS启动(一)下篇,附高频面试题合集

boolean factoryTest, boolean onlyCore) {...// PMS_START// A.1 创建SettingsmSettings = new Settings(mPackages);// A.2 system phone log nfc bluetooth shell 添加到SettingmSettings.addSharedUserLPw("android.uid.system", Process.SYSTEM_UID, Applic...

2021-09-02 17:50:00 84

原创 Framework 底层学习:一个浅显易懂的WMS介绍,建议细读

为所有窗口分配Surface: 客户端向WMS添加一个窗口的过程,其实就是WMS为其分配一块Surface的过程,一块块Surface在WMS的管理下有序的排布在屏幕上。Window的本质就是Surface,用于管理Surface的显示顺序、尺寸、位置和窗口动画。输入系统相关:WMS是派发系统按键和触摸消息的最佳人选,当接收到一个触摸事件,它需要寻找一个最合适的窗口来处理消息,而WMS是窗口的管理者,系统中所有的窗口状态和信息都在其掌握之中,完成这一工作不在话下。WMS主要类介绍:====..

2021-09-02 17:48:13 408

原创 Fragment新功能,setMaxLifecycle了解一下,历经30天

INITIALIZING 初始状态CREATED 已创建状态ACTIVITY_CREATED 完全创建,但是没有startedSTARTED 创建并启动,可见不可操作RESUMED 创建启动并可操作[图片上传中…(image-1940e7-1557923091355-0)]本文内容只对CREATED、STARTED、RESUMED这三个状态讲解,由于Fragment中定义的mState和Lifecycle.State不是同一状态,在本文视为同一概念;与生命周期对应关系..

2021-09-02 17:46:38 2426

原创 ForkJoinPool使用以及原理解读,高级Android开发技术

tryComplete:当前点为出发点,向依赖其节点进行循环处理,遇到以下情况会结束pending为0且依赖其的节点为空:pending为0时,回调onCompletion完成处理方法;若依赖其节点为空,则调用quietlyComplete方法设置执行状态为完成处理当前节点pending值-1成功propagateCompletion方法,和tryComplete方法相比,无onCompletion方法回调调用,也即对于每个中间任务无需关注quietlyCompleteRoot : ..

2021-09-02 17:44:58 340

原创 Flutter(七,阿里Android开发手册

ThemeData _buildDarkTheme() {const Color primaryColor = Color(0xFF0175c2);final ThemeData base = new ThemeData.dark();return base.copyWith(primaryColor: primaryColor,buttonColor: primaryColor,indicatorColor: Colors.white,accentColor: const Color(0xF

2021-09-02 17:43:11 82

原创 2019-阿里,缓存架构技术

这部分将结合我自己的经验,为大家准备面试提供一个参考。3.1 尽早开始准备首先,尽早开始准备。足够的时间是充足的准备的基本保证。不用担心因为早准备而遗忘的问题,因为每一次看都会比上一次看快很多。随着复习次数增加,对知识点的掌握也会更加牢固。我一些同学到面试前一个月甚至前几天才准备,这时再想准备好庞大的知识点就力不从心了,自然面试结果也不好。因此,一定要尽早开始准备,一定要尽早开始准备,一定要尽早开始准备。我是在面试前半年左右时开始系统地准备,那时其实已经有点晚了。3.2 形成自己的面试知识体系面试,

2021-09-01 10:40:52 122

原创 200行代码打造超越一线互联网公司的换肤架构,当上项目经理才知道

public void load(String skinPackagePath, final ILoaderListener callback) { new AsyncTask<String, Void, Resources>() { protected void onPreExecute() { if (callback != null) { callback.onStart();

2021-09-01 10:39:22 81

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除