- 博客(102)
- 收藏
- 关注
原创 Android Sunflower 带您玩转 Jetpack
选定植物后,界面便会转入 “植物详情” 页面。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-13ccpdL1-1652154329069)(https://user-gold-cdn.xitu.io/2018/8/28/1657fc9e59228876?imageView2/0/w/1280/h/960/ignore-error/1)]△ 植物介绍在植物详情详情页面中,您可以看到该植物的名称、描述、浇水方法以及照片。您可以点击界面内的悬浮操作按钮,将植物添加到自己的花园
2022-05-10 11:45:48
2715
原创 Android LeakCanary的使用和原理
myProcess = process;break;}}}if (myProcess == null) {CanaryLog.d(“Could not find running process for %d”, myPid);return false;}return myProcess.processName.equals(serviceInfo.processName);}源码分析SDK初始化mRefWatcher = LeakCanary.install(this);这个是S
2022-05-10 11:44:13
499
原创 android MaterialButton的使用
app:iconPadding=“@dimen/dp_4”app:iconSize=“@dimen/dp_12”app:iconTintMode=“multiply”tools:text=“测试数据测试数据”/>1、app:icon=“@drawable/ic_camera” 图标2、app:iconGravity=“textStart” 图标的位置3、app:iconSize=“24dp” 图标的大小4、app:iconPadding=“16dp” 图标与文字的距离5、app:cor
2022-05-10 11:42:41
924
原创 A005-AS项目结构解析
我们先来看1:我们创建Application的时候,要求我们输入项目名称,1就是我们创建的项目,AndroidDevelopCourse是项目名称,在实际开发中,我们要为我们项目取一个能明确表达产品的名称,一般使用英文来描述,比如我们的课程是“Android开发课程”。1展开之后是我们完整的项目文档结构。2: 我们的Android 模块,在AS当中,分为了Project(工作空间),Module(模块)两种概念,我们创建项目的时候会默认创建一个模块,这里的app就是我们的一个module,一个Andro
2022-05-10 11:40:53
358
原创 24岁程序员该怎样从现状走出来?(Android高级架构师之路
进了体制,国企嫌太安逸,没激情,一眼能看到二十年后的人生。进了私企嫌压力大,996太累,没休闲时间。辞职了想做点小生意发现自己根本不是那料,去做一些底层工作嫌不体面,工资低,遂家里蹲。我知道你想要什么,想要有个几千万上亿,想要有名,有颜,有健硕的身体,有别墅带游泳池,有豪车,有自家公司,平时旅旅游,有个清纯漂亮的女朋友,一起有些放飞自我的激情生活,蹦极,爬山,去法国,去美国,游遍世界,写书,人生充实有意义,人人见了都羡慕,无敌是多么寂寞!呵呵哒,你有吗?你能有吗?底层人不去改变空想就能有吗?自己怎么没有
2022-05-10 11:39:11
248
原创 2021年最新字节跳动Android面试真题解析
这里概括一下给同伴们的几个小建议:1、把自身的技能练扎实,2、找跟你过往经历匹配度非常高的岗位,3、面试的时候充分展现你个人的软实力硬实力。关于内推的(同公司应该是hr伙伴的良心建议):1、内推如果长时间没动静可能是简历没过。2、投递一些部门没过,可以再投别的部门,甚至有可能会有别的部门看到简历,然后捞起来。3、面试会有记录,面试前充分准备最好不要留下不好的面评。[](()最后我在面试前期做了一些面试准备,全网收集了一下字节跳动今年的面试真题(含解析),希望能帮助到大家学习提升,在面试中
2022-05-10 11:36:53
992
原创 2020年终总结
总结[](()前言2020年即将就要结束了,这是一个对很多人都是非常特殊且难忘的一年,因为爆发了新冠病毒疫情,并且席卷了全世界。这一场疫情打乱了很多人节奏,对很多人的工作和生活都产生了不同程度的影响,有苦有泪,冷暖自知。这一年对我来说也是非常特殊的一年,如果要我用一个关键字总结这一年那就是一个字——突破。不管是职业方面还有认知方面都有了一些突破,而这些突破离不开个人努力的因素,正所谓越努力越幸运就是这个道理。2020年全身心扑在工作和个人成长方面,一直都处于忙碌的状态,基本上没有了多余的社交活.
2022-05-10 11:35:07
121
原创 2020-Android-大厂面试(五)插件化
}} catch (Exception e) {e.printStackTrace();}替换了主工程context中LoadedApk的mResource对象将新的Resource添加到主工程ActivityThread的mResourceManager中,并且根据Android版本做了不同处理//第三步:关联resource和ActivityActivity activity = mBase.newActivity(plugin.getClassLoader(), targetClassN
2022-05-10 11:30:41
477
原创 2020 年移动开发趋势
本文翻译自 AMIT MANCHANDA 的 12 Mobile App Development Trends to Watch Out for in 2020,可点击原文参考阅读。文章仅属个人观点,如有不同见解,欢迎留言讨论移动手机正在以惊人的速度从根本上改变商业模型,运营模型和市场。到 2021 年,移动应用程序市场收入预计将达到 6930 亿美元。但是,按照 Gartner 先前的预测,10,000 个移动应用中有 9,999 个会失败。当今不断发展和充满活力的市场中,仅仅拥有移动设备是远.
2022-05-10 11:28:25
174
原创 1个人,100天业余时间,用Flutter开发完一个商业APP
爱奇艺直播助手APP的部分页面,也已经是用Flutter实现的了[](htt 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】 ps://blog.youkuaiyun.com/Coo123_/article/details/104620447)Flutter会不会有很多功能不能实现?目前,Flutter插件仓库里已经有4200多个插件了,其中包含国内常用的各种推送、社会分享、微信QQ支付宝登录、各种授权登陆、微信支付宝支付、淘系电商.
2022-05-10 11:26:12
815
原创 Android NDK开发入门
typedef int64_t jlong; /* signed 64 bits */typedef float jfloat; /* 32-bit IEEE 754 */typedef double jdouble; /* 64-bit IEEE 754 */[](()3.2 引用数据类型如果使用C++语言编写,则所有引用派生自jobject根类,如下所示。class _jobject {};class _jclass : public _jobject {};cla
2022-05-09 12:02:50
684
原创 Android Navigation + Fragment 制作APP主页面导航(步骤
<fragmentandroid:id=“@+id/afragment”android:name=“com.llw.navigation.fragment.AFragment”android:label=“afragment”tools:layout=“@layout/fragment_a” />上面的也很简单,id表示它在导航图的标识,name指明这个Fragment的路径,包名+类名。label就是标签而已。layout就是绑定这个Fragment对应的布局。这里你肯定回想,刚.
2022-05-09 12:00:46
3100
原创 Android MTK 编译命令
编译一般分为两个版本 eng(工程版本) 一般用来调试和测试带Root权限,这个版本编译时直接 ./mk xx(命令)另一版本 user(用户版本) 一般是发版软件./mk-o=TARGET_BUILD_VARIANT=user xx(命令)如果两个混合编译了如果是user版本时编译了eng版本的命令工程就GG了 只能 new 全部编译 驱动 内核 应用 耗时至少一个半小时Eng: ./mk project_name newUser:./mk&nbs
2022-05-09 11:59:09
859
原创 android listview添加headview
.show();}});2、添加头部view:必须放在setAdapter前面不然会报错lv.addHeaderView(headerView);3、listview填充假数据List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();HashMap<String, String> map = new HashMap<String
2022-05-09 11:57:38
687
原创 Android - 一种新奇的冷启动速度优化思路(Fragment极度懒加载 + Layout子线程预加载)
@Overridepublic void onPageScrollStateChanged(int state) {if (!hasReplacedAllEmptyFragments && mCurrentSelectedTab != mDefaultTab && state == 0) {//当满足: 1. 没有全部替换完 2. 当前tab不是初始化的默认tab(默认tab不会用空的Fragment去替换) 3. 滑动结束了,即state = 0replaceEmp
2022-05-09 11:55:49
647
原创 Activity管理(三)
onRestart()->onStart()->onResume()b) 完成了第一步对activity生命周期的响应之后,在第二步这里主要是处理窗口的添加动作:把DecorView添加到WindowManager中。完成第二步操作之后,activity的内容便显示到了屏幕上。这个窗口的添加动作属于窗口管理中的一个步骤,具体可参考《Android窗口管理剖析》一文。以下是部分主要接口到生命周期的响应的内部调用流程图二、ActivityManagerService及其内部调度流程\1.
2022-05-09 11:54:07
393
原创 2579页阿里P8Android学习笔记在互联网上火了,完整版开放下载
14.深入剖析 Android中的 ArrayMap[](()360 °全方面性能调优1.设计思想与代码质量优化2.启动速度与执行效率优化3.布局检测与优化4.内存优化5.耗电优化6.网络传输与数据存储优化7.APK大小优化8.开发效率优化9.项目实战[](()Java 相关1.Java 四种线程池的用法分析2.Java 有几种文件拷贝方式?哪一种最高效?3.使用 FileChannel(文件通道)来实现文件快速复制4.JVM 类加载机制详解 JVM 类加载过程5
2022-05-09 11:51:50
173
原创 2020请收好这一份全面-&-详细的Android学习指南
Android进阶与时俱进、热门技术编程语言计算机基础具体介绍如下:1.1 Android基础 & 常用针对Android基础&常用知识,按照优先级最主要的知识点主要包括:四大组件、布局使用、多线程 & 动画具体介绍如下:1.2 Android进阶针对Android进阶知识,按照优先级最主要的知识点主要包括:自定义View、性能优化;具体介绍如下:1.3 与时俱进、热门技术除了基础日常使用的Android知识,我们还需时刻关注行业动态,与时俱.
2022-05-09 11:48:06
572
原创 2020Android 开发年度总结:“这一年里我到底做了些啥
[](()前言眼看2020年还有两天就要结束了,即将迎来2021新的一年。感觉今年比起往年要过稍稍的快一些,因为2020的开年工作时间比以往是晚了许多,基本都是在3月份左右开始投入工作。而以往基本都是大年初八左右,人们都开始投入工作了。小编把自己这一年的一些事件进行了总结,请看下方本人是一名Android 开发者,毕业3年,年龄到了人们常说的中年危机的年纪。30岁之前就常常在各大社交博客平台上看到一些程序员中年危机和Android 不行了等相关帖子,刚开始我还是有点慌,在想当初选择走开发这条道路是
2022-05-09 11:43:23
636
原创 Android Camera1相机预览
切换相机/void switchCamera(int facing);/*设置Facing/void setCameraFacing(int facing);/*获取Facing/int getCameraFacing();/*设置预览尺寸/void setPreviewSize(Size cameraSize);/*获取预览尺寸/Size getPreviewSize();/*设置显示旋转角度/void setDisplayOrientation(int di.
2022-05-08 08:29:20
996
原创 Android Button 属性介绍与使用
| 属性 | 含义 || — | — || drawable | 正常按钮的一个背景颜色或图片,可以配置多种状态下的显示 || state_focused | 是否获得焦点 || state_window_focused | 是否获得窗口焦点 || state_enabled | 控件是否可用 || state_checkable | 控件可否被勾选 || state_checked | 控件是否被勾选 || state_selected | 控件是否被选择,针对有滚轮的情况 || sta
2022-05-08 08:27:25
1628
原创 Android Binder组合ContentProvider跨进程调用
MatrixCursor 的用法如下:首先创建一个字符数组,字符数组的值对应着表的字段:val COLUMN_NAME = arrayOf(“_id”, “name”, “age”)利用MatrixCursor的构造方法,构造一个MatrixCursor,传入的参数即是步骤1中创建的字段数组:matrixCursor = MatrixCursor(COLUMN_NAME)通过matrixCursor的addRow方法添加一行值,相当于向数据库中插入一条记录:matrixCursor?
2022-05-08 08:25:21
330
原创 Android App开发架构之:MVC
[](()优点===========================================================上手快。新建工程的时候,Android已经分配了XML和Activity,这样直接对应View层和Controller层,我们只需要增加model模块处理好数据即可。由于Controller层承担了较多的处理j界面展示和数据处理的功能,相对来说简化业务模块和功能模块的划分。[](()缺点===================================
2022-05-08 08:23:47
608
原创 Android 10(Android Q) 适配心得
NotificationManager notifyManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);notifyManager.notify(notifyId, builder.build());注意在Target SDk为29及以上时,需要在AndroidManifest上增加USE_FULL_SCREEN_INTENT申明//AndroidManifest中测试下来,
2022-05-08 08:22:16
369
原创 Andorid&Kotlin编译速度原理剖析(上)
@get:Optionalabstract val versionName: Property<String?>//版本号@get:Input@get:Optionalabstractabstract val versionCode: Property<Int?>//父类NonIncrementalTask的唯一抽象方法,也就是BuildConfig的主要逻辑处理方法override fun doTaskAction() {//获取类里面的属性包括一些自定义的属性v
2022-05-08 08:20:28
274
原创 3-5年以上的Android原生开发如何深入进阶?高级工程师必须要掌握哪些?
在工作初期,工作主要是按照业务需求实现App页面的功能,按照设计师的设计稿实现页面的效果。在实现的过程中,总是会被提如下的需求:这个字能不能大点或者醒目点儿?颜感觉颜色和设计稿有差别,能不能再调调?怎么老是崩溃啊,行不行啊?…所以,工作过一年后你会发现,自己的工作重点就是**将找各种各样的组件、框架,拖拖拽拽,改改样式。**在极端情况下出现了问题后(比如部分机型上崩溃,加载图片慢),也不知道该如何解决!都不好意思说自己是搞技术的。造成这种局面的有两种原因:所开发的App功能要求并不复杂
2022-05-08 08:18:46
250
原创 2020最新统计,年薪50万+的Android开发者所必备的知识体系架构,你都会吗?
JVMJavaIO注解序列化三:Android框架体系架构(高级UI+FrameWork源码)这块知识是现今使用者最多的,我们称之为Android2013~2016年的技术,但是,即使是这样的技术,Android开发者也往往因为网上Copy代码习惯了而导致对这块经常“使用”的代码熟悉而又陌生。职业生涯规划面向Android中的一切实体(高级UI+FrameWork源码)实体间的通信方案实体中数据存储专题四:360°Androidapp全方位性能..
2022-05-08 08:12:40
125
原创 2020最新BAT-Android高端技术面试145题详解
1.排序算法有哪些?2.最快的排序算法是哪个?3.手写一个冒泡排序4.手写快速排序代码5.快速排序的过程、时间复杂度、空间复杂度6.手写堆排序7.堆排序过程、时间复杂度及空间复杂度8.写出你所知道的排序算法及时空复杂度,稳定性9.二叉树给出根节点和目标节点,找出从根节点到目标节点的路径10给阿里2万多名员工按年龄排序应该选择哪个算法?11.GC算法(各种算法的优缺点以及应用场景)12.蚁群算法与蒙特卡洛算法13.子串包含问题(KMP 算法)写代码实现14一个无序,不重复数组,输出N
2022-05-08 08:10:17
279
原创 Android MTK 设置默认启动 Launcher
//Slog.d(TAG,“set default launcher”);final PackageManager mPm = mContext.getPackageManager();ArrayList homeActivities = new ArrayList();ComponentName currentDefaultHome = mPm.getHomeActivities(homeActivities);ComponentName[]mHomeComponentSet = new Comp
2022-05-07 11:17:23
696
原创 Android Framework学习笔记(五)应用程序启动过程
注释1调用了doPendingActivityLaunchesLocked方法。ActivityStarter#doPendingActivityLaunchesLocked()final void doPendingActivityLaunchesLocked(boolean doResume) {while (!mPendingActivityLaunches.isEmpty()) {final PendingActivityLaunch pal = mPendingActivityLaunch
2022-05-07 11:15:05
353
原创 Android BLE基础框架全新改版
}@Overridepublic void onScanFinish(BluetoothLeDeviceStore bluetoothLeDeviceStore) {}@Overridepublic void onScanTimeout() {}}).setUuid(uuid));扫描指定设备 MAC 或名称集合的设备ViseBle.getInstance().startScan(new ListFilterScanCallback(new IScanCallback() {@Ove
2022-05-07 11:13:26
355
原创 Android App安装包大小优化
android:layout_marginTop=“100dp”android:layout_gravity=“center_horizontal”android:layout_centerInParent=“true”android:src=“@drawable/ic_icon_name”android:layout_width=“wrap_content”android:layout_height=“wrap_content”/>或者<ImageViewandroid:la
2022-05-07 11:11:52
525
原创 Android AIDL实现进程间通讯IPC
return binder;}private final DataService.Stub binder = new DataService.Stub() {@Overridepublic int getData(String type) throws RemoteException {return 5;}@Overridepublic String getTime() throws RemoteException {return “2016-01-23”;}};}③Android
2022-05-07 11:10:02
149
原创 Andoird中LiveEventBus的使用——用LiveEventBus替代RxBus
LiveEventBus.get(“key”).postDelay(“value”,3000);2、接受消息,注册一个订阅在需要接受消息的地方LiveEventBus.get(“key”,String.class).observe(this, new Observer() {@Overridepublic void onChanged(@Nullable String s) {Log.i(TAG,s);}});当发送key这条消息的时候,就会实时接收到消息 ,前提页面没有销毁,因为具有生命
2022-05-07 11:07:40
919
原创 Activity-Hook填坑过程中温故而知新(2)
this, mMainThread.getApplicationThread(), mToken, child,intent, requestCode, options);if (ar != null) {mMainThread.sendActivityResult(mToken, child.mEmbeddedID, requestCode,ar.getResultCode(), ar.getResultData());}来解析这一段逻辑:两句代码,一个是 mInstrumentatio
2022-05-07 11:05:29
187
原创 35岁被裁,闭关67天总结经验提升实力,完虐面试官怒斩腾讯、华为
8.线程之间的协作9.java内存模型由于篇幅限制,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!有需要的程序猿(媛)可以帮忙转发+关注私信(架构资料)获取哦[](()Android核心知识1.Activity2.Fragment3.数据存储4.View4.Parcelable 接口5.IPC6.屏幕适配7.消息机制8.线程异步9.Webview,后来我尝试使用ViewPager+GridView实现的,看起来一切正常,就没有再解决VIewPager+RecyclerVIew滑动冲突的问题,不过我初步分析可以用过重写ViewPager的onInterceptTouchEvent方法
2022-05-06 11:20:41
875
原创 Android WindowManager窗口类型
WindowManager的LayoutParams中窗口类型与定义:frameworks\base\core\java\android\view\WindowManager.java/**Start of window types that represent normal application windows.ZMS:首个普通应用窗口*/public static final int FIRST_APPLICATION_WINDOW = 1;/**Window t
2022-05-06 11:18:43
455
原创 Android Vsync原理简析
从图中可以看到,有了VSYNC,cpu总是在指定的地方开始。有人会问: 说白了,真正解决问题的是VSYNC,而不是双缓冲,那不要双缓冲只要VSYNC不是也可以吗?好,我们假设只有VSYNC,现在假设屏幕正在渲染数据,而cpu在等VSYNC信号,屏幕将数据渲染完毕后,发送VSYNC信号,cpu收到信号后,就去计算数据,计算完后才会写入帧缓冲,那么,在cpu计算数据这段时间内,屏幕干什么呢?嗯,它接着刷新帧缓冲的数据,反正cpu还没有将新数据计算完毕刷入帧缓冲,所以还是上一帧的数据,这样就会卡顿,说白了,.
2022-05-06 11:16:32
1690
原创 Android UI--ViewPager扩展Tab标签指示
android:layout_height=“wrap_content”android:layout_weight=“1.0”android:gravity=“center”android:text=“特性4”android:textSize=“18sp”/><ImageViewandroid:id=“@+id/cursor”android:layout_width=“wrap_content”android:layout_height=“wrap_content”andro
2022-05-06 11:14:51
385
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人