Kotlin入门续
Kotlin入门续
第一行代码——Android(第3版)
系列文章旨在记录作者学习第一行代码第三版kotlin部分的历程
文章涉及的代码:https://github.com/yaoyifei1216/AndroidProgramming/tree/master/KotlinStarted
本篇文章作为kotlin入门内容主要包括kotlin的基本语法部分
Kotlin入门
Kotlin入门
第一行代码——Android(第3版)
系列文章旨在记录作者学习第一行代码第三版kotlin部分的历程
文章中的demo:https://github.com/yaoyifei1216/AndroidProgramming/tree/master/KotlinStarted
本篇文章作为kotlin入门内容主要包括变量和函数 程序控制语句 面向对象编程 以及两个常见的类模型
变量kotlin使用var和val关键字用来修饰两种类型的变量
val:声明的变量不可变,类似于java的final
var:声明一个可变变量
区别于java要在变量前声明类型,kotlin因为其类型推导机制,可以实现仅仅用两个关键字就可以实现变量的声明
类型推导机制:如果要把一个整型变量赋值给a,那么a肯定就是整型变量
注意:类型推导机制并不是完美的,如果对一个变量延迟赋值的话,这个时候就需要显式的声明变量类型了
与java不同的是,kotlin中没有基本的数据类型,全部使用了对象数据类型,如使用Int而不是int
Java中final关键字没有被合理使用的问题:在Java中,除非你主动在 ...
Android WatchDog
Android WatchDog1.1问题背景测试机点击设置中的重置应用偏好后界面卡死
【预置条件】无【操作步骤】设置->系统->重置选项->点击重置应用偏好【实际结果】界面卡死点击无反应【预期结果】重置后界面可点击【发生概率】10/10
1.2问题原因:1234"Binder:6102_1C" prio=5 tid=128 Blockedwaiting to lock <0x053efd20> (a com.android.server.am.ActivityManagerService) held by thread 32"PackageManager" prio=5 tid=32 Blockedwaiting to lock <0x081d6b54> (a android.util.ArrayMap) held by thread 128
循环等待导致死锁,触发system server watchdog
2.1WatchDog简介 Android中 ...
Android R 新特性
Android R 新特性1、隐私权更新
隐私权变更
受影响的应用
缓解策略
强制执行分区存储机制 以 Android 11 为目标平台的应用始终会受分区存储行为的影响
以 Android 11 为目标平台的应用,以及以 Android 10 为目标平台且未将 requestLegacyExternalStorage 设为 true 以停用分区存储的应用
更新您的应用以使用分区存储 详细了解分区存储变更
单次授权 使用单次授权功能,用户可以授予对位置信息、麦克风和摄像头的临时访问权限
以任何版本为目标平台且请求位置信息、麦克风或摄像头权限的应用
在尝试访问受某项权限保护的数据之前,检查您的应用是否具有该权限 遵循请求权限方面的最佳做法
自动重置权限 如果用户在 Android 11 上几个月未与应用互动,系统会自动重置应用的敏感权限
以 Android 11 为目标平台且在后台执行大部分工作的应用
要求用户阻止系统重置应用的权限 详细了解自动重置权限
后台位置信息访问权限 Android 11 更改了用户向应用授予后台位置信息权限的方式
以 Android 11 ...
ActivityManagerService
ActivityManagerServiceAMS是通过ActivityStack及其他数据结构来记录,管理系统中的Activity及其他组件状态的,并提供查询功能的一个系统服务。
组件状态管理:包括四大组件的开启,关闭等一系列操作
如startActivity,activityPaused,startService,stopService,removeContentProvider等
组件状态查询:查询组件当前运行等情况。如getCallingActivity,getService等
Task相关:包括removeTask,removeSubTask,moveTaskBackwards,moveTaskToFront等
AMS启动流程AMS寄存与system server中,它会在系统启动时,创建一个线程来循环处理客户端的请求
12345678/frameworks/base/services/java/com/android/server/SystemServer.javaprivate void startBootstrapServices() { .. ...
Zygote进程启动过程
Zygote进程启动过程frameworks/base/core/java/com/android/internal/os
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121public static void main(String argv[]) { ZygoteServer zygoteServer = null; // Mark zygote start. This ensures that thread creation will throw // an error. ...
深入理解android内核设计思想读书笔记
深入理解android内核设计思想读书笔记5.1 Android进程和线程进程是程序的一个运行实例;线程是cpu的基本调度单位
并发实现的操作系统采用分时的方法,为正在运行的多个任务分配合理的、单独的CPU时间片来实现并发
四大组件并不是进程的载体,只是进程的组成部分
一个只有一个activity的程序,最少有三个Thread(一个main线程,两个binder线程)
main线程是由ActivityThread创建的,两个binder线程一个负责和ams通信,一个负责和wms通信
同理一个之只有service的程序也是一样的,service和activity的主线程都是ActivityThread
如果一个android程序有两个activity,也只有一个main线程,但是会有三个binder线程
一个相同的包里组件默认是同一个进程的,当然也可以通过process属性声明不同的进程
5.2 handler,messageQueue,runnable,looper
Message和runnable都是可以被压入某个messageQueue中,runnable可以封装成messag ...