Android技术笔记
文章平均质量分 60
jiejingguo
这个作者很懒,什么都没留下…
展开
-
Android adb命令获取当前Activity或者Fragment
adb shell “dumpsys window | grep mCurrentFocus”adb shell dumpsys activity your.package.name原创 2023-01-31 19:17:36 · 7909 阅读 · 0 评论 -
Eclipse项目转Android Studio
Eclipse项目转成AS项目的配置原创 2022-12-06 20:07:11 · 533 阅读 · 0 评论 -
Android Studio gradle.properties和asset下的properties文件 中文取值乱码的解决方案
gradle.properties中文乱码错误配置在gradle.properties增加myName=小明。然后在应用模块的build.gradle中增加resValue "string", "myNameFromProperties", "${myName}"。从如下路径可以看出编译出来的myNameFromProperties是乱码。build/generated/res/resValues/debug/values/gradleResValues.xml正确配置...原创 2022-05-17 17:31:15 · 1655 阅读 · 0 评论 -
使用LitePal时出现的问题
问题描述PersonRec与FeatureRec是一对多的关系PersonRec personRec = LitePal.where("personId = ?", personId).findFirst(PersonRec.class);这里的personRec查出来是不空的,然后为这条记录更新数据personRec.setPersonInfo(personInfo).save();更新成功了,最后为它增加一条关联记录FeatureRecboolean isFeatureSaved =原创 2022-04-29 15:26:17 · 909 阅读 · 0 评论 -
设计接口的心得
从业务本身出发如果业务A与业务B关联很大,但业务A和业务B是可以完全独立存在的业务。这时应该为业务A和业务B分别设计各自的接口。而不应该只提供一个接口将业务A和B绑定在一起。比如原创 2022-04-15 16:11:54 · 2368 阅读 · 0 评论 -
业务流程的异常处理方案
异常处理方案假设正常流程如下:如果步骤2出现异常,那么处理方案一般有以下两种:1、撤销步骤1,当整个流程没有发生过;2、提供补救步骤2.1,然后继续执行步骤3加入补救步骤时,就要考虑如果补救步骤也发生异常时的处理情况。举例车队加油卡充值流程场景1假设银行卡支付成功后,加油卡的充值失败了。这就意味着客户付款了,但是自己的加油卡却没有充到钱。这时候可以有以下两种处理方案方案1撤销银行卡支付,当这次的充值流程没有发生过。方案2提供“补充值”步骤,补充值成功后继续打印票据。并且原创 2022-01-27 16:51:06 · 1243 阅读 · 0 评论 -
BuildConfig配置参数
配置由函数生成的长整型buildConfigField “String”, “PACK_TIME”, “String.valueOf(${packTime()}l)”原创 2021-11-09 09:33:06 · 842 阅读 · 0 评论 -
《Jetpack应用指南》笔记
ViewModel持有UI数据Activity/Fragment仅展示数据和处理用户交互。ViewModel持有UI数据。生命周期Activity的重建不会影响ViewModel的生命周期。ViewModel的生命周期函数只有一个onCleared(),当且仅当Activity代表的页面被销毁时才会调用该函数。ViewModel引用ContextViewModel的生命周期长于Activity,所以不应该在ViewModel中持有Activity的引用,否则将引起内存泄漏。ViewMod原创 2021-07-08 14:16:09 · 269 阅读 · 0 评论 -
用正则表达式过滤日志
用正则表达式的“与”、“或”、“非”筛选日志中的关键词原创 2021-04-16 10:39:39 · 1065 阅读 · 1 评论 -
AOP思想的理解
AOP(面向切面)是OOP(面向对象)的补充OOP思想AOP思想原创 2021-03-22 17:07:42 · 360 阅读 · 1 评论 -
Java动态代理的理解
动态代理怎么理解要理解动态代理,就要先理解什么是“动态”,什么是“代理”。动态一般情况下如果想实现接口,就直接在代码里面创建一个该接口的实现类即可,然后代码直接运行起来就可以了。这种情况下,在代码运行前接口的实现类就已经通过硬编码的方式编写好了。之所以称为“动态”,是因为接口的实现类并不是事先编写好的,而是在代码运行时生成的。这样的类就叫动态类,而由动态类创建的实例,就叫作动态实例。代理我们往往不会凭空生成动态类,这么做没有意义。通常是为了指定的目标对象创建代理才会这么做,所以才叫动态代理。什原创 2020-12-23 10:25:54 · 169 阅读 · 0 评论 -
arr的解压与重打包
解压aar将aar解压至tmpDir文件夹在aar所在路径下打开cmd窗口,输入如下命令:unzip ×××.aar -d tmpDir重打包将tmpDir重新打包成一个新的aarjar cvf ×××NewLib.aar -C tmpDir/ .不要漏了末尾的 “.”,“tmpDir/” 与 “.” 之间用空格分隔。×××NewLib.aar表示新aar名称。...原创 2020-12-11 14:06:47 · 2022 阅读 · 0 评论 -
LockSupport的几点笔记
LockSupport基于一个“许可”的概念来决定线程是否阻塞或是否解锁。当线程调用LockSupport.pack()时先判断是否获取许可,如果已经被分配了许可,就不阻塞当前线程,否则阻塞当前线程,直到其它线程调用LockSupport.unpack()给该线程分配许可。每个线程最多只有1个许可,每个线程的许可各不相同,且互不影响。向一个线程分配许可后,如果该许可没有被消耗掉,那么即使向这个线程释放再多的许可也没有用,因为一个线程最多只能有一个许可。等到最开始的许可被消耗后,如果该线程又调用Loc.原创 2020-05-21 10:52:37 · 150 阅读 · 0 评论 -
MySQL修改root的密码
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘新密码’;原创 2019-10-29 13:43:51 · 112 阅读 · 0 评论 -
Android Studio使用WIFI调试应用
先保证电脑和设备(如:手机)连上同一个局域网确保可以执行adb shell输入adb -s 32abe500 tcpip 8888adb connect 设备的当前IP地址当提示connected to 设备的当前IP地址时说明wifi连接已经成功了。如果需要断开wifi连接,则输入adb disconnect即可...原创 2019-09-26 15:57:44 · 920 阅读 · 0 评论 -
再看Activity的启动模式
Activity的启动模式:standard、singleTop、singleTask、singleInstance。这四种模式分别是指什么,网上一大堆,就不说了。下面整理下我对这几种启动模式的认识。为什么要设计这么多种启动模式?默认启动模式:standard。每次启动Activity都要创建一个实例,开销太大。为了复用原有的实例,所以又添加了singleTop、singleTask、...原创 2019-09-09 11:33:34 · 183 阅读 · 0 评论 -
有关线程的笔记
每创建一个线程都要消耗内存,每个线程都有自己的栈空间(大约1M),也就是说每创建一个线程,操作系统就会给该线程分配1M的空间。而且当线程执行完时间片后需要把数据保存至内存或硬盘中,下一个线程执行时又要从内存或硬盘中取出对应自己的数据,这么一存一取也很耗时间。这就是为什么线程开太多的话,会导致执行任务所花费的时间更多的原因。Thread和Runnable不是一对一的关系,而是一对多的关系。比如线...原创 2019-04-17 23:10:02 · 297 阅读 · 0 评论 -
Android Studio导入修改过的系统源码
导入系统源码在主工程模块(如:app)下新建一个文件夹,名字随意,比如exlibs。把android.jar放入exlibs文件夹中。在主工程模块的build.gradle(如:app/build.gradle)加入如下一句话: dependencies { compileOnly files('exlibs/android.jar') //这里填写android.jar的路径 ...原创 2018-10-19 14:35:32 · 645 阅读 · 1 评论