CustomPainter
实现自定义的绘制算法
自定义 Widget
组合 更小的 Widget 来创建自定义 Widget
Intent
在 Flutter 中的对应概念是什么
使用 Navigator
和 Route
在同一个 Activity
内的不同界面间进行跳转
Route
是应用内屏幕和页面的抽象,Navigator
是管理路径 route 的工具
Navigator 可以通过对 route 进行压栈和弹栈操作实现页面的跳转。
Navigator 的工作原理和栈相似, route 压栈 (push()
),route 弹栈 (pop()
)
在 Flutter 中应该如何处理从外部应用接收到的 intent?
Flutter 可以通过直接和 Android 层通信并请求分享的数据来处理接收到的 Android intent。
AndroidManifest.xml
中注册 intent 过滤器
MainActivity
中处理 intent,提取出其它 intent 分享的文本并保存。
Flutter 准备好处理的时候,它会使用一个平台通道请求数据,数据便会从原生端发送过来
Widget 渲染的时候,从 Flutter 这端请求数据
startActivityForResult()
的对应方法是什么?
Navigator
类负责 Flutter 的导航,并用来接收被压栈的 route 的返回值。这是通过在 push()
后返回的 Future
上 await
来实现的。
异步 UI
Dart 有一个单线程执行的模型
支持 Isolate
(在另一个线程运行 Dart 代码的方法)
Isolate
是一个事件循环和异步编程方式
如何将任务转移到后台线程?
Flutter 是单线程并且运行一个事件循环
无须担心线程的管理以及后台线程的创建
执行和 I/O 绑定的任务(例如存储访问或者网络请求,那么你可以安全地使用 async
/await
)
你需要执行消耗 CPU 的计算密集型工作,那么你可以将其转移到一个 Isolate
上以避免阻塞事件循环
Isolate
来利用多核处理器的优势执行耗时或计算密集的任务
Isolate 是独立执行的线程,不会和主执行内存堆分享内存。
OkHttp 在 Flutter 中的对应物是什么?
Flutter 中使用流行的 http
包 进行网络请求
如何为耗时任务显示进度?
使用 ProgressIndicator
widget。通过代码逻辑使用一个布尔标记值控制进度条的渲染。
build 方法被拆分成三个不同的方法。如果 showLoadingDialog()
返回 true
(当 widgets.length == 0
),渲染 ProgressIndicator
。否则,在 ListView
里渲染网络请求返回的数据。
在哪里放置分辨率相关的图片文件?
Flutter 遵循一个简单的类似 iOS 的密度相关的格式。文件可以是一倍 (1.0x
)、两倍 (2.0x
)、三倍 (3.0x
) 或其它的任意倍数。
Flutter 没有 dp
单位,但是有逻辑像素尺寸,基本和设备无关的像素尺寸是一样的。
字符串储存在哪里?如何处理本地化?
Flutter 当下并没有一个特定的管理字符串的资源管理系统。
将字符串作为静态域存放在类中,并通过类访问它们。
Flutter 开发者使用 intl 包 进行国际化和本地化。
Gradle 文件的对应物是什么?我该如何添加依赖?
在 pubspec.yaml
文件中定义在 Flutter 里使用的外部依赖。 pub.dev 是查找 Flutter packages 的好地方
如何监听 Android Activity 的生命周期事件?
绑定 WidgetsBinding
观察者并监听 didChangeAppLifecycleState()
的变化事件来监听生命周期。
可以被观察的生命周期事件有:
-
inactive
— 应用处于非活跃状态并且不接收用户输入。这个事件只适用于 iOS,Android 上没有对应的事件; -
paused
— 应用当前对用户不可见,无法响应用户输入,并运行在后台。这个事件对应于 Android 中的onPause()
; -
resumed
— 应用对用户可见并且可以响应用户的输入。这个事件对应于 Android 中的onPostResume()
; -
suspending
— 应用暂时被挂起。这个事件对应于 Android 中的onStop
; iOS 上由于没有对应的事件,因此不会触发此事件。
LinearLayout 的对应概念是什么?
Row 或者 Column Widget 来实现相同的效果。
RelativeLayout 的对应概念是什么?
组合使用 Column、Row 和 Stack Widget 实现 RelativeLayout 的效果。
ScrollView 的对应概念是什么?
实现这个功能的最简单的方法是使用 ListView widget。
在 Flutter 中如何处理屏幕旋转?
FlutterView 会处理配置的变化,前提条件是在 AndroidManifest.xml 文件中声明了:
android:configChanges=“orientation|screenSize”
Flutter 中如何为一个 Widget 添加点击监听器?
如果 Widget 支持事件监听,那么向它传入一个方法并在方法中处理事件。例如,RaisedButton 有一个 onPressed
参数
如果 Widget 不支持事件监听,将 Widget 包装进一个 GestureDetector 中并向 onTap
参数传入一个方法。
如何处理 Widget 上的其它手势?
使用 GestureDetector 可以监听非常多的手势,例如:
-
Tap
-
onTapDown
- 一个可能产生点击事件的指针触摸到屏幕的特定位置。 -
onTapUp
- 一个产生了点击事件的指针停止触摸屏幕的特定位置。 -
onTap
- 一个点击事件已经发生。 -
onTapCancel
- 之前触发了onTapDown
事件的指针不会产生点击事件。 -
Double tap
-
onDoubleTap
- 用户在屏幕同一位置连续快速地点击两次。 -
Long press
-
onLongPress
- 指针在屏幕的同一位置保持了一段较长时间的触摸状态。 -
Vertical drag
-
onVerticalDragStart
- 指针已经触摸屏幕并可能开始垂直移动。 -
onVerticalDragUpdate
- 触摸屏幕的指针在垂直方向移动了更多的距离。 -
onVerticalDragEnd
- 之前和屏幕接触并垂直移动的指针不再继续和屏幕接触,并且在和屏幕停止接触的时候以一定的速度移动。 -
Horizontal drag
-
onHorizontalDragStart
- 指针已经触摸屏幕并可能开始水平移动。 -
onHorizontalDragUpdate
- 触摸屏幕的指针在水平方向移动了更多的距离。 -
onHorizontalDragEnd
- 之前和屏幕接触并水平移动的指针不再继续和屏幕接触,并且在和屏幕停止接触的时候以一定的速度移动。
ListView 在 Flutter 中的对应概念是什么?
因为 Flutter widget 不可变的特点,你需要向 ListView 传入一组 widget, Flutter 会保证滑动的快速顺畅。
如何知道点击了哪个列表项?
使用传入 widget 的触摸监听。
如何动态更新 ListView?
在 Flutter 中,如果你准备在 setState()
里更新一组 widget,你很快会发现你的数据并没有更新到界面上。这是因为当 setState()
被调用的时候, Flutter 渲染引擎会查看 Widget 树是否有任何更改。当引擎检查到 ListView
,他会执行 ==
检查,并判断两个 ListView
是一样的。没有任何更改,所以也就不需要更新。
推荐的高效且有效的创建一个列表的方法是使用 ListView.Builder。这个方法非常适用于动态列表或者拥有大量数据的列表。
如何为 Text Widget 设置自定义字体?
将字体文件放入一个文件夹,并在 pubspec.yaml
文件中引用它,就和导入图片一样。
如何更改 Text Widget 的样式?
Text
Widget 的样式参数接收一个 TextStyle
对象,你可以在这个对象里自定义很多参数,例如:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
![](https://i-blog.csdnimg.cn/blog_migrate/230b7082460d38a0388ba0d8d7fd413e.jpeg)
分享读者
作者2013年java转到Android开发,在小厂待过,也去过华为,OPPO等大厂待过,18年四月份进了阿里一直到现在。
被人面试过,也面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长,而且极易碰到天花板技术停滞不前!
我们整理了一份阿里P7级别的Android架构师全套学习资料,特别适合有3-5年以上经验的小伙伴深入学习提升。
主要包括阿里,以及字节跳动,腾讯,华为,小米,等一线互联网公司主流架构技术。如果你有需要,尽管拿走好了。
35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长,而且极易碰到天花板技术停滞不前!
我们整理了一份阿里P7级别的Android架构师全套学习资料,特别适合有3-5年以上经验的小伙伴深入学习提升。
主要包括阿里,以及字节跳动,腾讯,华为,小米,等一线互联网公司主流架构技术。如果你有需要,尽管拿走好了。
[外链图片转存中…(img-XRZeFqed-1712503753513)]
35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!