- 博客(456)
- 资源 (25)
- 收藏
- 关注
原创 Activity之onCreate、onRestoreInstanceState恢复数据的区别
onCreate() 、onRestoreInstanceState()恢复数据的区别
2022-07-23 22:34:32 850
原创 Flutter之Pigeon插件与Android通信使用指南
Flutter pigeon插件使用指南,pigeon可以使得flutter与原生native的通信
2022-06-10 11:01:17 759 1
原创 Activity onSaveInstanceState 状态保存和恢复机制实战之ManagedDialog应用
Activity自动管理Dialog的状态
2022-06-06 16:07:50 272
原创 Flutter之Key简析
在博主《Flutter之GlobalKey详解》和《Flutter之Widget 更新机制原理浅析》中两篇博文中简单的说明了key的作用,这里在简单做个笔记(翻译子官方文档),加深自己对key的理解。官方对于key的解释如下:///Key对象是用作Widget、Element、SemanticsNode的标识符,也就是唯一ID/// A [Key] is an identifier for [Widget]s, [Element]s and [SemanticsNode]s.///当newWidg
2022-05-06 19:19:40 721
原创 mac flutter开发环境搭建 zsh: command not found: flutter解决方案
1、github下载flutter项目源码博主下载到/Users/arthur/Documents/flutter/目录下,(arthur是我Mac的用户名)2、配合环境变量,使用终端执行如下命令:2.1、sudo vim ~/.bash_profile,打开 .bash_profile文件。2.2、按i进入输入模式,在文件内容的末尾加入以下内容://flutter 目录export PATH=/Users/arthur/Documents/flutter/bin:$PATH//androi
2022-05-02 13:28:11 2301
原创 Android Studio couldn‘t generate bytecode view, no .class file found
Android Studio 安装了插件ASM Bytecode Viewer,准备学学ASM相关知识,为Android自动化埋点原理做技术储备。ASM Bytecode Viewer使用步骤:1、Android Studio 安装ASM Bytecode Viewer插件,安装完成后重启Android Studio,2、然后选中MainActivity,右键选择ASM Bytecode Viewer:结果就出现了 couldn’t generate bytecode view, no .cla
2022-04-22 19:25:23 2907 2
原创 Android Studio Gradle Plugin开发入门指南
Plugin插件入门指南1、本文目的2、Plugin简介3、Android Studio开发插件的步骤3.1 创建Java library3.2 配置plugin 项目的build.gradle文件。3.3 发布插件到本地。3.4 发使用本地插件。1、本文目的 1、了解gradle 插件的基本知识 2、掌握插件开发的基本方法 3、根据Plugin的相关知识为后面逐步深入解析Android自动化埋点的实现原理做知识储备 4、本书参考资料: 4.1、《Gradle实战》一
2022-04-13 16:48:20 2256
原创 Android 代码重构案例
很久之前读过一本书《重构,改善既有代码设计》,这本书对自己的影响很大,里面的一些实用性技巧现在还在保持和使用。今天阅读团队小伙伴的代码,发现了这么一段:private void setTextViewData(int type) { switch (type) { case 1: textView.setText("aaaa"); break; case 2: textView.setText(
2022-03-30 09:42:11 2573
原创 力扣之两数相加
原题出处https://leetcode-cn.com/problems/add-two-numbers/,描述如下图:解题思路很简单:当前两个链表的节点node1和node2形成的新节点的值的算法为//上一个节点的进位,比如3+9=12,进位为1 (进位的英文翻译carry)int carry=(preNode1.val+preNode2)/10;int sum = node1.val+node2.val+carry;//比如4+6=10,去余则为0Node newNode = New No
2022-03-02 17:04:49 2028
原创 Android 签名问题记录MinSdkVersionException: Failed to determine APK‘s minimum supported platform version
com.android.apksig.apk.MinSdkVersionException: Failed to determine APK's minimum supported platform version. Use --min-sdk-version to override at com.android.apksigner.ApkSignerTool.verify(ApkSignerTool.java:447) at com.android.apksigner.ApkSignerTool.ma
2022-03-02 13:21:29 3636
原创 Androrid Studio Debug Warning:debug info can be unavailable
在使用Android Studio进行debug的时候,偶尔会弹出如下图的弹框:Warning:debug info can be unavailable.Please chose other application using ADB解决方式如下:1、拔下手机的USB数据线。2、关闭手机开发者选项3、关闭开发者选项下的"USB调试"4、打开"USB调试"5、打开开发者选项6、重新插上USB数据线...
2022-03-02 09:33:54 3230
原创 Java 单向链表翻转
链表翻转的思路有很多,再此做个记录。思路一:最简单的思路就是先遍历链表,逐一将链表里的节点放入到栈里面;然后在遍历栈,将栈里的元素在逐一出栈形成新的链表。主要是利用了栈的后进先出的特点。思路二:遍历链表,然后将链表的修改head.next的指向,每一次遍历都将head.next指向已经遍历过得节点就可以了: /** * 链表翻转 * @param node */ public ListNode reverseListNode(ListNode node) { //新链表
2022-02-24 16:22:39 795
原创 Android WorkManager 实战讲解
WorkManager实战讲解WorkManager实战实例1、 定义工作,创建Worker对象2、链接工作3、定义工作请求WorkRequest4、WorkManager、ViewModel、LiveData结合本篇博文以Android 官方demo WorkManagerSample为例,分析WorkManager的使用方法和相关知识点。通过本篇博文你可以理解和掌握以下知识点:1、WorkManager的基本用法2、多个Worker先后执行的链接方式。3、WorkManager和ViewMode
2022-02-23 17:03:38 944 5
原创 Flutter实战之GetX工具类封装-GetUtils
在开发过程中经常会定义各种Utils类,用来作为常用的辅助工具来使用,GetUtils 是getx为我们提供一些常用的工具类库,它提供了一些常用的方法,避免了我们二次开发,比如通过GetUtils我们可以用来判断参数是否是图片,是否是word,是否是excel,是否是音频,是否是图片,邮箱和手机号码等等等。1、比如判断字符串是否是相同字符:Example: 111111 -> true, wwwww -> true, 1,1,1,1 -> trueGetUtils.isOneKind
2022-02-15 10:21:23 1892
原创 Android Gradle动态打32位或者64位的包
正在开开心心的敲代码,以前公司的后端同事问我一个问题:“android 打包的时候如果需要分别打32位和64位的包,gradle要怎么配置和执行可以做到?而不是每次手动修改gradle.build文件?”这个问题还真是没想过,幸亏很久之前读过《Gradle 实战》这本书,有点儿灵感,然后实现之,在此记录下来,以免以后忘记。算是2022年1月21日第一篇学习笔记。1、在android的rootProject的build.gradle中,定一个一个变量:ext { //约定1代表32位,2代表64位,
2022-01-21 14:59:27 13794 1
原创 2021年终总结
兜兜转转,日子晃到了2021年尾。今年感觉过的可真快。2021年终总结一、最大的收获二、最大的遗憾三、学习相关3.1 博客、书籍相关3.2 业余爱好3.3 游戏风云3.4 社会所得3.5 最有价值的购物3.6 其他杂谈一、最大的收获在2021年6月6号,亲爱的老婆给我生了一个可爱的女儿,郭梧悠。我博客的头像就是我女儿四个月左右照的,CSDN昵称也是小棉袄的名称。如今宝宝再过6天就七个月啦,每天都要看她的照片和视频,仿佛有了无穷的动力。闺女的出生也改变了自己的生活态度。比如更积极,不论每天过的多么操蛋,
2021-12-31 14:16:40 8400 14
原创 Android LiveData组件分析
文章目录前言一、不使用LiveData的计数器存在的问题二、使用LiveData的实现计数器三、LiveData 添加观察者四、LiveData postValue和setValue方法分析前言Android ViewModel组件详解博文中以计数器为例说明了ViewModel的用处和原理,它可以有效的预防内存泄漏问题。本文来分析另外一个组件LiveData。LiveData组件跟ViewModel结合,可以说是以一大利器。本文以2.2.0版本为例配合Android ViewModel组件详解一文中的计
2021-12-27 13:56:49 1032 2
原创 Java多线程为什么使用while循环来调用wait方法
Java多线程为什么使用while循环来调用wait方法?《java并发编程实战》一书第14章列出了详细的原因(多看书还是会有收获滴),在此总结下来。示例代码://示例代码,从队列中获取元素public synchronized void put(V v) throws InterruptedExcetpion{ //不能使用if(isFull) while(isFull()){ wait(); } doPut(v) notivyALl();}详细原因博主梳理如下:
2021-12-11 15:24:49 682
原创 Flutter之RenderView RenderObject ParentData知识点梳理
RenderView RenderObject ParentData知识点梳理 前言一、参考资料二、RenderView1、Flutter runApp的具体流程:2、 RenderView的创建3、RenderObjectToWidgetElement 构建详解前言本篇文章详细的说明了RenderView ,RenderObject在Flutter框架体系中的位置,为进一步分析Flutter其他相关做知识储备,其实本篇的内容只要读者自己简单追踪下其源码,就可以轻松了解一、参考资料这些相关资料大部分
2021-12-07 09:23:01 2495
原创 Flutter实战之FlutterPlugin插件入门指南
通过本篇博文你可以了解到FlutterPlugin的使用方法以及FlutterPlugin在FlutterToast的应用。FlutterPlugin使用指南及FlutterToast原理剖析1、FlutterPlugin是什么?1.1 FlutterPlugin的用法和项目结构2、FlutterToast原理剖析。2.1 ToastNoContext :不带Context的Toast2.2 Fluttertoast.showToast简单说明。2.3 FlutterToastPlugin 简析1、F.
2021-12-03 15:26:56 1341
原创 Fultter 实战No toolchains found in the NDK toolchains folder for ABI arm-linux-androideabi
最近准备学习下Flutter的Toast插件的使用,Windows环境,Android Studio 4.1.1版本。从github上下载demo运行后会报如下错误。FAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':app:stripDebugDebugSymbols'.> No toolchains found in the NDK toolchains folde
2021-12-02 16:36:30 2012
原创 Java并发编程实战读书笔记之死锁
死锁的分类前言一、锁顺序死锁二、动态的锁顺序死锁。前言本篇学习笔记源自于《Java并发编程实战》第10章。提示:以下是本篇文章正文内容,下面案例可供参考一、锁顺序死锁看下面代码,很容易造成死锁,leftRight和rightLeft方法分别获取了left和right锁,只不过二者获取锁的顺序是相反的。那么如果一个Thread调用了leftRight,另一个Thread调用了rightLeft,并且两个Thread的操作是交错执行的,那么就容易发生时所。class LeftRightDead
2021-11-27 10:06:52 295
原创 如果从零开始开发一款APP,需要做哪些准备
今天在下班回去的地铁上,突然脑海中蹦出了这个问题!再结合自己微薄的项目经验,由此得出了这篇文章。鉴于博主是Android开发那么文中大部分都偏向于Android。闲言少数,书归正传,前提就不用多说了。1、需要确定好Android支持的最低版本。2、确定APP发布的渠道,方便以后数据统计。3、确定好APP的升级策略,比如最好能提供一个接口,用来判断是否强制用户升级。4、确定好使用哪些SDK,以及SDK需要收集的信息,比如MAC地址等等。编写好隐私政策和用户协议。特别是隐私政策,按照华为隐私政策的要求,
2021-11-25 20:32:52 1458
原创 Android类加载器和热修复原理
Android ClassLoader学习笔记Activity Context 使用的加载器类型ClassLoader简单说明BootClassLoader简单说明PathClassLoader简单说明DexClassLoader 简单说明热修复的核心原理Activity Context 使用的加载器类型因为项目中用到了阿里云的热修复框架,所以就简单的看了下热修复相关的资料。里面涉及到ClassLoader相关的知识,于是乎就查看其源码了解了一波。于是乎有了这篇学习笔记,在这里先推荐一个看android
2021-11-20 13:49:37 1946
原创 android jarsigner: 找不到.keystore的证书链
使用Java SDK给android apk打包的步骤:1、cmd定位到C:\Program Files\Java\jdk1.8.0_241\bin 目录2、为了方便将demo.keystore放在了C:\Program Files\Java\jdk1.8.0_241\bin目录下。3、开始使用jarsigner命令签名jarsigner -verbose -keystore demo.keystore -signedjar after_signed.apk before_sign.apk demo
2021-11-19 14:07:32 1980
原创 Flutter音频播放插件just_audio入门指南
just_audio使用指南简介AudioSource简介对AudioPlayer的控制添加headders添加http user agent剪辑音频控制进度和声音播放状态的监听播放进度的监听播放音频时APP推到后台当音频被打断时的处理简介just_audio是一款功能丰富的音频播放器,适用于Android、iOS、macOS和web。从官方提供的图就可以看出其功能的丰富性。比如可以控制播放声音,控制播放速度,监听播放进度等等。(本篇博文基本都是翻译自just_audio,所以可以直接点击just_a
2021-11-09 19:40:11 5036 3
原创 Java并发编程实战之基于生产者消费者模式的日志服务读书笔记
public class LogService { private final BlockingDeque<String> queue; private final LoggerThread loggerThread; public LogService(PrintWriter writer) { queue = new LinkedBlockingDeque<>(); loggerThread = new LoggerThr
2021-11-06 16:59:58 322
原创 java并发编程实战读书笔记 ExecutorCompletionService
当我们向Executor提交一组任务,并且希望任务在完成后获得结果,此时可以考虑使用ExecutorCompletionService。ExecutorCompletionService实现了CompletionService接口。ExecutorCompletionService将Executor和BlockingQueue功能融合在一起,使用它可以提交我们的Callable任务。这个任务委托给Executor执行,可以使用ExecutorCompletionService对象的take和poll方法获
2021-11-01 10:35:13 243
原创 java并发编程实战读书笔记之FutureTask
在《Android AsyncTask源代码浅析》一文中介绍了Android AsyncTask的原理,里面也初步介绍了FutureTask的使用方法。在创建Future的时候,根据其构造器来看需要传一个Callable对象,其构造器如下。 public FutureTask(Callable<V> callable) { this.callable = callable; this.state = NEW; // ensure visib
2021-10-31 22:30:29 1177
原创 Flutter实战之Flutter应用生命周期 AppLifecycleState浅析
通过本篇博文你可以了解到1、Flutter APP 生命周期涉及到哪几种状态?2、如何监听Flutter应用的状态变化?1、Flutter APP 生命周期涉及到哪几种状态?Flutter APP的生命周期有四种状态,在AppLifecycleState这个枚举类里有定义:resumed : APP进入前台状态,比如从后台切换到前台时,APP的状态从paused切换到resumed状态,注意点击桌面图标启动APP的时候,是不会进入该状态的 ;paused : 应用进入后台时,比如按手机Home键使应
2021-10-29 13:46:38 2346
原创 Java并发编程实战读书笔记5 ---Executor在android中的应用
最近业余时间在读《Java并发编程实战》这本书,现在已经读到了第二部分。该书上有这么一段话:如果你的项目中出现这样的代码 new Thread(new Runnable() { @Override public void run() { } }).start();的话,那么你可以考虑使用Executor了这句话让我想到了我以前 在项目中对Executor做了一个小小的封装,可以当做一个小小的工具类使用。封装后可以将上面代码改成: //ExecutorType是一个枚举类,TASK_ON_PER
2021-10-28 14:59:18 206
原创 Android的TextView设置padding无效
最近在开发了一个新的功能,有如下UI样式:我采用动态代码的方式来实现的,代码如下: TextView textView = new TextView(context); textView.setTag(action); textView.setTextSize(7); textView.setGravity(Gravity.CENTER); textView.setTextColor(Color.WHITE); textView.setText("
2021-10-25 16:54:48 1090
Android ASM 代码自动化埋点
2022-04-23
QQ侧滑简单实现
2016-03-08
ViewDragHelperDemo
2016-03-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人