- 博客(43)
- 收藏
- 关注
原创 Android
5.横竖屏切换,按home键,按返回键,锁屏与解锁屏幕,跳转透明Activity界面,启动一个 Theme 为 Dialog 的 Activity,弹出Dialog时Activity的生命周期。7.Dialog的Context只能是Activity的Context,不能是Application的Context。如果是400800,10801920,加载的优先级。4.IntentService是什么,IntentService原理,应用场景及其与Service的区别。2.ActivityThread是什么?
2024-08-01 13:44:34 350
原创 等额本息贷款的提取还款计算 之 月供不变计算方法
本质上提交还款,就是结束一个旧的贷款开始一个新的贷款,有一些越是条件可以选,比如月供不变,期数不变之类的,个人觉得月供不变,缩短期数降低利息才是提前还款的意义,所以就用月供不变来计算还是固定公式入手:月供 = [借款金额×月利率×(1+月利率)^借款月数]÷[(1+月利率)^借款月数-1]新贷款中 月供已知为上份贷款的月供数,金额为上份贷款剩余未还本金,利率是签约数据,所以未知数只有借款的月数一元等式,解出来一步步等式变形 ,初中数学知识 用 X 代借款月数; 1、月供 = [借款金..
2020-07-21 14:16:06 3687
原创 等额本息的贷款计算。。后续更新 提前还款
import kotlin.math.pow//剩余贷款金额 初始化为总贷款数 一百万var totalLoad: Double = 1000000.0//剩余月供期数 初始化为贷款期限 30 年var cycle: Double = 360.0//真是贷款期限var totalCycle: Int = 360//年利率 真实年利率 加点浮动可以自己计算 2019 上浮 10%val yearRate = 0.0539//月利率val mouthRate = ye.
2020-06-03 10:17:24 296
原创 Android广播的分类和使用
在 Android 开发中,广播(Broadcasts)是一种在应用之间或应用内部发送消息的机制。广播允许应用程序向其他应用程序或操作系统发送消息,以通知某个事件的发生。Android 系统和应用程序都可以发送和接收广播。
2024-08-26 14:11:29 571
原创 ClassNotFoundException when unmarshalling Crash
我们看过Bundle代码之后,就会发现无论读写Bundle对象的内容,都会先调用unparcel这个方法,它的作用就是反序列化的核心,将二进制格式的数据转换成内存中的Java对象,所以这个过程中必然是要进行类加载创建对象的,也就是在这个过程中出现ClassNotFoundException。我们在上文其实讲过Bundle的unparcel作用了,反序列化过程会按照存储对象的类型分别进行,这个过程在Parcel.readValue方法中, 其中解析Bundle类型对象会调用到readBundle方法。
2024-08-07 15:15:00 979
原创 Service中的onStartCommand()方法的三种返回值的含义以及理解
使用这个返回值时,我们启动的服务跟应用程序"粘"在一起,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。START_REDELIVER_INTENT:(常量值:3)车祸后自己苏醒,依然保持记忆。
2024-08-05 15:59:19 374
原创 IntentService是什么,IntentService原理,应用场景及其与Service的区别
2,service和IntentService的区别是,IntentService有自己的工作线程,不会阻塞主线程出现ANR,而且任务结束后会自己停止,不需要手动停止。多次启动不会创建多个service的实例,而是都会走onStartCommd和onstart方法,因为内部HandlerThread的缘故,多个任务不会同时执行,应为HandlerThread内部只有一个子线程,任务会排成队逐个执行直到结束。任务要一步一步执行,并且执行结束后自行结束服务,比方说,自动更新,下载apk,安装apk,等等。
2024-08-05 15:54:42 314
原创 Service与Activity怎么实现通信
Activity通过AIDL接口的代理对象调用Service中的方法,实现跨进程通信。在Android开发中,Service与Activity之间的通信是常见的需求,以便实现功能的协调和数据的传递。以下是几种实现Service与Activity通信的主要方法: ### 1. 使用Binder机制 Binder是Android系统提供的一种IPC(进程间通信)方式,允许Activity直接访问并调用Service中的方法。回调中,通过返回的IBinder对象获取Service的实例,并调用其方法。
2024-07-30 18:18:38 384
原创 service 的生命周期,两种启动方式的区别和混合调用相关
启动方式调用方法生命周期方法特点Service在后台无限期运行,直到被明确停止;调用者与Service之间无绑定关系onCreate()、onBind()、onUnbind()(可选)、onDestroy()Service与调用者绑定在一起,形成客户端-服务器关系;调用者销毁或解绑时,Service可能会停止(取决于是否还有其他startService()请求)了解这些差异有助于开发者根据应用的需求选择合适的Service启动方式,并有效地管理Service的生命周期。
2024-07-30 17:39:37 423
原创 ViewModel相关
ViewModel不仅是Activity和Fragment的数据集中管理和通讯,也是促进了MVVM和MVI架构规范,此文为深入理解ViewModelViewModel 不仅仅解决了因为页面配置改变而丢失数据的问题,而且承担了数据载体和业务处理等与界面无关的职责,降低了业务、数据和UI的耦合度。更大程度上促进了MVVM以及MVI架构的成熟和发展。开发者更应该了解背后的相关原理,不管在面试还是在使用都胸有成竹。
2024-07-30 17:11:55 918
原创 Activity的onNewIntent()方法什么时候会执行
PS: 核心一点 就是已经Activity已经存在了,然后还有被复用的时候 就会走。已经存在于任务栈中(无论是位于顶部还是其他位置),根据。:如果你的应用从通知栏中的通知启动了一个。已经位于任务栈的顶部,并且用户尝试通过。(如果它已经在前台),并且不一定会导致。已经位于任务栈的顶部,那么同样会调用。的状态(如位于任务栈的顶部或符合。方法会被调用,而不是创建这个。方法,而不是创建新的实例。的条件)时才会被调用。不会被调用,而是会正常通过。的调用,但它在将已存在的。的匹配导致创建了一个新的。
2024-07-30 10:47:31 460
原创 Intent的数据传递
数据大小限制:虽然官方没有明确说明Intent的数据大小限制,但是Intent是通过Binder机制进行IPC(进程间通信)的,Binder交易缓存区有大小限制(通常是1MB或2MB,具体取决于设备和Android版本)。使用Messenger或AIDL进行IPC:如果需要在不同进程之间传递大量数据,并且需要更复杂的交互逻辑,可以考虑使用Messenger(基于Handler的消息传递)或AIDL(Android接口定义语言)来实现。对于大数据量的传递,建议使用文件、数据库或序列化与反序列化的方式。
2024-07-29 15:07:50 639
原创 onStart、onResume、onPause和onStop
方法定义状态回调角度用途onStart()Activity正在被启动Activity可见但不在前台可见性初始化UI元素,准备显示onResume()Activity可见并位于前台Activity完全可见且在前台前台性恢复Activity状态,准备交互onPause()Activity正在停止Activity不在前台,可能仍然可见前台性保存状态,执行清理工作onStop()Activity即将停止,不再可见Activity不可见可见性执行不耗时的清理工作。
2024-07-29 14:16:29 827
原创 横竖屏切换,按home键,按返回键,锁屏与解锁屏幕,跳转透明Activity界面,启动一个 Theme 为 Dialog 的 Activity,弹出Dialog时Activity的生命周期
在Android开发中,横竖屏切换、按Home键、按返回键、锁屏与解锁屏幕、跳转透明Activity界面、启动一个Theme为Dialog的Activity,以及弹出Dialog时,都会对Activity的生命周期产生影响。启动一个 Theme 为 Dialog 的 Activity: 会onPause 不会stop。横竖屏切换:A 走完 ondestory 才会走B的onCreate --会走pause。跳转透明Activity界面:会走pause 但是不会走onstop。锁屏与解锁屏幕:普通。
2024-07-29 11:46:35 839
原创 WebView的优化
在Android应用开发中,WebView是一个常用的组件,用于在应用中展示网页内容。然而,WebView的启动速度和性能可能会影响用户体验,特别是在一些性能较低的设备上,性能提升,能提升应用的响应速度和用户体验。ps :单进程webviewActivity,全局webView等等。
2024-07-25 11:39:45 1066
原创 Activity A跳转Activity B,再按返回键,生命周期执行的顺序
startActivity(Intent) 的底层实现是将 intent分解成任务,传递到mainLooper 轮询的队列中,最终由主线程执行。所以跟由哪个线程调用一点关系都没有的。在子线程中是不可以进行UI操作更新,但同时不要误以为不可以进行startActivity() ,进行界面跳转。如果是dialog呢,生命周期不会变,因为dialog是add到当前window的。横竖屏切换 本质上就是关一个开一个,关完了开,同样是 A都恢复了 B再继续Stop。也就是B可见了 A才会stop。
2024-07-24 16:22:15 363
原创 activity的启动模式和使用场景
设置方式:清单文件设置:android:launchMode=“singleTop”启动设置flag :intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
2024-07-24 16:07:52 259
原创 onSaveInstanceState(),onRestoreInstanceState的调用时机 恢复数据和OnCreate的区别
用onRestoreInstanceState方法恢复数据,可以决定是否调用父类的onRestoreInstanceState方法super.onRestoreInstanceState(savedInstanceState);因为onSaveInstanceState 不一定会被调用,所以onCreate()里的Bundle参数可能为空,如果使用onCreate()来恢复数据,一定要做非空判断。因为activity没有被系统回收,因此onRestoreInstanceState没有被调用。
2024-07-24 15:53:17 721
原创 Activity的启动流程
最早的进程 ,通过脚本 init rc拉起负责zygote serviceManager sufacefinger mediaService守护其他进程init进程创建Zygote进程,创建了虚拟机和start方法,启动Zygote进程java层 通过JNI调用ZygoteInit的main方法,进入Zygote的java框架层预加载资源 Android。jar。openGi 为了后面共享。
2024-07-23 18:29:37 971
原创 Flow 基础使用相关
数据流是一种数据处理方式,数据被异步 连续传输和处理,像水从高处流到低处,流的过程中可以处理水,过滤加糖 加热等的,下流是消费端,直接消费喝掉就行。
2024-07-19 18:20:19 585
原创 Recyclerview 滑动相关
都是view的方法,实现的是view内容的滑动,view本身没有动,而是控件上绘制的内容在控件范围内滑动。RecylerView的实现,区别 to是根据初始位置为尺,by是根据当前位置为起点。
2024-07-17 16:15:44 231
原创 Flutter
自动会类型推倒dart中定义变量可以通过var关键字可以通过类型来申明变量例如:var str=“你好”;String str2=“新湖村”;final 和 const区别 final 可以动态的后赋值Final是运行时常量var listType=[1,2,3,]——容量可变—固定长度 【fales,false】B??=3 如果 b 是空的 就赋值 3类 命名构造函数静态成员属于类?条件运算符As 类型转换Is 类型判断。
2024-07-17 16:13:09 319
原创 Zygote进程的基础流程
Fork是什么,Fork是孵化子进程的方法,优势是快,创建一个父进程的副本,继承内存布局,环境变量,打开文件的描述符,也就是子进程和父进程会共享很多数据,内核只需要创建很少的数据就可以,还有个。可调用java代码的native线程,需要JNIEnv对象来调用java,拦截就是为把JNIev对象交给他,JNIEnv是每个进程都有的,解析出来的 参数64 需要start systemserev 或者加载资源相关的,32不需要,因为32用的很少,不需要浪费。:共享的数据当被改变了才会拷贝复制;
2024-07-12 13:54:17 651
原创 Git经验积累
Android 里的Git pull 和 Git update 功能的区别Git pull :Git pull 的功能是将远程仓库的最新代码拉取到本地仓库,并自动合并到当前分支。可以理解成fetch + merge 或 fetch + rebaseGit update :Git update 的功能是将本地仓库的当前分支更新到远程仓库的最新代码,但不会自动合并。只有fetch 没有merge区别总结Git pull:自动拉取并尝试合并远程分支的最新更改到本地分支。
2024-07-05 10:21:45 161
原创 Retrofit 相关
1.Retrofit是什么Retrofit 通过 java 接口以及注解来描述网络请求,并用动态代理的方式生成网络请求的 request,然后通过 client 调用相应的网络框架(默认 okhttp)去发起网络请求,并将返回的 response 通过 converterFactorty 转换成相应的数据 model,最后通过 calladapter 转换成其他数据方式(如 rxjava Observable)
2024-07-05 09:29:46 252
原创 Kotlin里kapt引入 的报错
原因:kotlin开发的插件不支持跨module,所以databinding在使用apt技术BR文件时的引用没发确定目录,故造成unresolved reference:BR,那么需要kapt完成。新问题:Class not found 自定义生成的类 生成不了。日志:unresolved reference: BR。原因:已经kapt了 就要换成kapt。最开始遇到的问题是 BR文件 找不到。...
2022-08-08 14:50:17 3988
原创 Android遇到的一个 bug classnofound
因为@JavascriptInterface的方法写了返回值,打包没问题,apk 也能运行 但是 打开会闪退,找不到类
2021-07-06 18:46:47 166 2
原创 shouldShowRequestPermissionRationale 权限
shouldShowRequestPermissionRationale 1,在允许询问时返回true ; 2,在权限通过 或者权限被拒绝并且禁止询问时返回false 但是有一个例外,就是重来没有询问过的时候,也是返回的false 所以单纯的使用shouldShowRequestPermissionRationale去做什么判断,是没用的,只能在请求权限回调后再使用。 Google的原意是: 1,没有申请过权限,申请就是了,所以返回false; 2,申请了用户拒绝了,那你就要提示用户了,所以返回true;
2021-05-28 18:35:40 1284
原创 约束布局控制的 flag 标志的不被挤压、、
app:layout_constrainedWidth="true" <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tv_name" android:layout_alignParentLeft="true" ..
2021-05-14 16:59:08 127
原创 Kotlin 的 java 反射取属性值
//先取出来 xxx 类的 所有属性val fields: Array<Field> = xxx.javaClass?.getDeclaredFields()!!// 去取 varName 属性的值valValuefields.forEach { if (varName.equals(it.name)) { it.isAccessible = true var valValue = it.get(item.content) ..
2020-09-23 22:38:08 1132
原创 ConstraintLayout 的实战使用
https://www.jianshu.com/p/17ec9bd6ca8a 简书很全。。。要熟悉用辅助工具Barrier 屏障 是当一面距离不固定的使用<TextView android:id="@+id/TextView1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView ...
2020-09-01 17:33:34 113
原创 记录一个自定义 三角背景的 实例
需求如图因为现在国手机 ROM 都适配了深色模式(A 屏的天下,黑暗模式是未来必须的)如果用图片作为背景 会出现一些问题:为了不用单独适配系统的黑暗模式,所以用 xml 自己画一个 才是最合理的,然后 Android 的图形没有三角,只有矩形 圆形和椭圆形,所以要自己组合, 实际操作是 用正方形旋转来截取三角形往下移动代码如下<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:and..
2020-08-27 18:30:41 262
原创 lc for kotlin
leetcode 第一题给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]来源:力扣(LeetCode)链接:https://leetcode-cn.com/prob...
2020-08-14 09:47:31 223
原创 WebView 和底部 View 的嵌套滑动
思路,监听 webView 滑到的位置 和 底部 View 是否显示1 上滑且到底部,父布局响应2 上滑且不到底部,webView布局响应3 下滑 且底部 VIew 可见,父布局响应4下滑 且底部 VIew 不可见,webView布局响应//代码待上传...
2020-07-22 10:49:28 220
原创 一个有优先级出来的自定义线程池
先创建一个线程池val mPoolExecutor: ExecutorService =ThreadPoolExecutor( 3, 3, 60, TimeUnit.SECONDS, PriorityBlockingQueue<Runnable>())创建一个可排序的 Runnable abstract class Orderl...
2020-03-29 22:10:04 319
原创 巩固一下 Android知识
SharedPreferences 相关是个轻量级的存储类,可以存基本类型数据,本质是写到了硬盘上的一个xml文件,从 data 包名的路径直接能进去找到,随便一个 Root 过的手机就能读取数据,安全性较低。翻看源码是其本质都是存储为了 String 类型保存,所以我们可以封装一下更方便用,object 类型可以转 json 格式来上传, getSharedPreferences 是走 ...
2020-03-29 12:54:00 194
原创 Android 的那些奇奇怪怪的问题
那些奇奇怪怪的问题ConstraintLayout 预览显示不了不止ConstraintLayout,还有其他的 androidx 的问题,其实很诡异,上午没事下午就预览不了了,结果更新版本解决了看到日志是 class 类有问题 样式加载不了TextView 换行不生效,inputType导致第一天正式写ConstraintLayout,遇到问题就把问题想成了 ConstraintLay...
2020-03-24 15:13:09 227
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人