![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
vovo2000
这个作者很懒,什么都没留下…
展开
-
ACTION_DATE_CHANGED不响应
Q:在android7以前的虚拟机上日期改变使用adb shell “dumpsys|grep BroadcastRecord”可以看到系统发出的广播,在7以及更高的版本上接收不到这个广播了,网上也没说这个广播弃用了啊。A:这个action只有在动态注册的情况下才有用,在Android.manifest文件中静态注册是不会被触发的。使用的时候要注意一下。...原创 2021-10-11 15:01:02 · 655 阅读 · 0 评论 -
Android集成日志框架logback-android(log4j)
Logback 继承自 log4j。可以通过引入依赖,或者引入jar包来使用参考Android使用logback日志框架_jordanhgl的专栏-CSDN博客特性:支持占位符 ‘{}’支持xml、代码方式配置appender文件滚动方式: 按时间 按文件大小等支持日志文件压缩,当日志文件以.gz or .zip结尾支持发送邮件(默认error级别日志)支持写入数据库(目前支持三种 oracle、mysql & sql server)3、AppenderAppende.原创 2021-10-11 10:28:51 · 1432 阅读 · 0 评论 -
[Kotlin] Elvis表达式中的神坑
在Kotlin中大家会用{} ?: {}来代替? {} : {}表达式使用,?:被称为Kotlin的Elvis表达式。问题读下面这段代码,大家看看它的打印值会是什么?class Pack { var text: String? = "" fun foo() { val result: String? = text?.run { println("block 1") null } ?: run转载 2021-10-05 13:50:48 · 307 阅读 · 0 评论 -
Context都没弄明白,还怎么做Android开发?
Activity mActivity =new Activity()作为Android开发者,不知道你有没有思考过这个问题,Activity可以new吗?Android的应用程序开发采用JAVA语言,Activity本质上也是一个对象,那上面的写法有什么问题呢?估计很多人说不清道不明。Android程序不像Java程序一样,随便创建一个类,写个main()方法就能运行,Android应用模型是基于组件的应用设计模式,组件的运行要有一个完整的Android工程环境,在这个环境下,Activity、Serv原创 2021-08-13 20:20:45 · 98 阅读 · 0 评论 -
Android Context完全解析与各种获取Context方法#
Context类型我们知道,Android应用都是使用Java语言来编写的,那么大家可以思考一下,一个Android程序和一个Java程序,他们最大的区别在哪里?划分界限又是什么呢?其实简单点分析,Android程序不像Java程序一样,随便创建一个类,写个main()方法就能跑了,而是要有一个完整的Android工程环境,在这个环境下,我们有像Activity、Service、BroadcastReceiver等系统组件,而这些组件并不是像一个普通的Java对象new一下就能创建实例的了,而是要有它们转载 2021-08-13 20:17:24 · 4863 阅读 · 0 评论 -
解决RecyclerView刷新,数据显示错乱
【问题现象】 做一个条目展示的的项目用到RecyclerView,在界面中有收藏和取消收藏的功能,第一个出现的问题就是点击按钮收藏或者取消收藏后,按钮的状态发生了改变,但是当收藏或者取消收藏的条目上下滑动滑出屏幕外再次进入时,按钮的状态没有改变,调试发现此时没有重新获取项目的状态标记,所以此时需要将项目修改的数据重新发送给adapter,然后刷新NotifyDataSetChanged,问题完美解决;第二出线的问题就是条目数据错乱问题,采用以下方法可以完美解决:【解决方法】首先,在绑定a..转载 2021-08-04 09:06:01 · 2496 阅读 · 3 评论 -
实例分析, RecyclerView回收和复用机制详细分析
开始最近在研究 RecyclerView 的回收复用机制,顺便记录一下。我们知道,RecyclerView 在 layout 子 View 时,都通过回收复用机制来管理。网上关于回收复用机制的分析讲解的文章也有一大堆了,分析得也都很详细,什么四级缓存啊,先去 mChangedScrap 取再去哪里取啊之类的;但其实,我想说的是,RecyclerView 的回收复用机制确实很完善,覆盖到各种场景中,但并不是每种场景的回收复用时都会将机制的所有流程走一遍的。举个例子说,在 setLayoutManager、转载 2021-08-04 10:16:52 · 262 阅读 · 0 评论 -
RecyclerView的使用(一):基本使用
前言对于从事Android开发的朋友们来说,RecyclerView大家肯定都不陌生,这是一个和listView有些相似的列表结构控件,可以实现一些基本的列表的显示及事件内容。本期对于RecyclerView的一些基本使用做些简单的说明,如果您已经对Recyclerview的使用非常熟悉,可以选择跳过此篇文章。基本使用RecyclerView的使用步骤比较简单,主要包含如下几步;包引入,引入对应的RecyclerView包 设置布局文件,主要包括引入的布局文件将RecyclerView作为转载 2021-08-03 15:40:35 · 594 阅读 · 0 评论 -
8位颜色Hex码 定义颜色透明度
/* This is green */ background: rgb(0, 255, 0); /* It's the same as this */ background: #00ff00; /* We could make it 50% transparent like this */ background: rgba(0, 255, 0, 0.5);上面的代码,大家应该很熟悉。就是定义颜色的代码。 /* with an alpha hex like this...原创 2021-07-28 18:07:52 · 4330 阅读 · 0 评论 -
Android生命周期
从根本上讲,大多数Android组件都有与其相关联的生命周期。 您曾经负责处理应用程序的生命周期,这并非总是一件容易的事,尤其是对于同时进行多个异步调用而言。 无法正确处理应用程序生命周期会导致一些问题,例如内存泄漏和崩溃。 尽管您正确地管理了生命周期,但是在生命周期方法(例如onStart()和onStop()方法)中实现所有与生命周期相关的代码都是很复杂的。 简而言之,这种方法使方法难以阅读,维护和测试。Google documentGoogle文档提供因此,生命周期库通过支持实现生命周期.原创 2021-07-28 13:34:36 · 621 阅读 · 0 评论 -
3分钟了解Android Kotlin 协程coroutines
kotlin 中 GlobalScope 类提供了几个创建协程的构造函数:launch: 创建协程 async : 创建带返回值的协程,返回的是 Deferred 类 withContext:不创建新的协程,指定协程上运行代码块 runBlocking:不是 GlobalScope 的 API,可以独立使用,区别是 runBlocking 里面的 delay 会阻塞线程,而 launch 创建的不会withContextt这个函数主要可以切换到指定的线程,并在闭包内的逻辑执行结束之后,自动把线程原创 2021-07-20 15:48:53 · 294 阅读 · 0 评论 -
Android的协程(Coroutines)基础概念
这是我见过的说明得最简单明了的文章。最近学习了下协程,在这里分享一下我自己的理解。1、协程是什么?在定义协程是什么之前,我们应该先知道协程是做什么的,对于项目而言是新增加的东西?还是替换原有的逻辑,从而获得好处?我们先看看coroutines最基础的用法: private fun runCoroutines() { GlobalScope.launch(Dispatchers.Main) { val data = getData()/转载 2021-07-20 15:31:52 · 653 阅读 · 0 评论 -
Android模拟键盘输入功能的实现
在做关于输入框的操作指引时,用动态的输入效果比用静态的图片指示效果会好很多,本文结合最近需要实现的一个搜索输入操作指引的功能介绍一下android平台模拟键盘输入的实现。在android上不知道怎么录制gif的动态图,直接截图看一下效果吧,具体看demo就行啦。 实现起来很简单,开一个线程,通过sleep控制输入字符的间隔时间,封装一个模拟键盘输入的方法,最终代码是这样子的:public class TypeInActivity extends Activity { @Overri转载 2021-04-13 10:20:39 · 1855 阅读 · 0 评论 -
安全问题网站参考 日文
日文(未翻译)请自行用baidu或谷歌的web翻译日本官方的漏洞对策第10章 著名な脆弱性対策www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c901.htmlYahoo的工程师通过开发一个todo软件,教你如何对应安卓开发的安全问题news.mynavi.jp/itsearch/article/security/2436...原创 2021-04-12 19:04:38 · 151 阅读 · 0 评论 -
PostgreSQL 取得表table所占空间的大小
想知道一个table的行数的话,select count(*) 就可以了。想要知道各个表占的空间的大小的话,需要知道一行所占空间,再乘以行数。如果只是大概了解,不需要精确的数据的,可以利用postgre的统计数据。表 pg_class・relpages block数・reltuples 行数先实行ANALYZE命令,更新统计数据。block的大小是8k (查看命令:SHOW block_size)。换算成M的话,一个表所占空间是relpages / 128Mbytes...原创 2021-04-09 14:36:21 · 1419 阅读 · 0 评论 -
什么是高阶函数
高阶函数英文叫Higher-order function。什么是高阶函数?变量可以指向函数以Python内置的求绝对值的函数abs()为例,调用该函数用以下代码:>>> abs(-10)10但是,如果只写abs呢?>>> abs<built-in function abs>可见,abs(-10)是函数调用,而abs是函数本身。函数名也是变量那么函数名是什么呢?函数名其实就是指向函数的变量!对于abs()这个函数.原创 2021-04-08 13:32:53 · 462 阅读 · 0 评论 -
SuppressLint黄色警告的原因以及解决办法
最近在做项目的时候,碰到方法的前面和类的前面有时会出现@SuppressLint或者@SuppressWarnings这样的黄色警告,看起来很不舒服,于是上网搜集了一些相关资料。发现这些警告的出现其实是由于我们编写代码时的一些不规范的写法导致,解决这些问题其实是能提高我们程序的安全性、可用性和性能的。接下来就让我为大家一一说明。1、@SuppressLint(“DrawAllocation”)原因:我们都知道View及其子类的OnDraw(Canvas canvas)方法会实时调用来更新界面的,然而有时转载 2021-01-21 08:49:27 · 1004 阅读 · 0 评论 -
android 自动化测试 Junit 中使用intent
在Android中使用junit测试时,在local test中,不需要测试activity,但是类里使用到intent的时候,可以这样子取得intent项目的junit,robolectric,请自行设定。@RunWith(RobolectricTestRunner.class)public class SteraPaymentUtilTest {@Testpublic void test01() { //如此定义,即可取得intent Intent intent原创 2021-01-08 15:12:20 · 217 阅读 · 0 评论 -
android里的 ARGB 和 RGB
RGB(#RRGGBB) 代表用Red,Green,Blue的值来表示一个颜色。这个大家都知道。ARGB(#AARRGGBB) 多了一个Aphal值来表示透明度。一些常用的透明度100% - FF95% - F290% - E685% - D980% - CC75% - BF70% - B365% - A660% - 9955% - 8C50% - 8045% - 7340% - 6635% - 5930% - 4D25% - 4020% - 3315..原创 2020-08-17 16:24:45 · 717 阅读 · 0 评论 -
关于Android setColorFilter 的一些困惑
同一个ImageViewsetColorFilter后,再set任何图片都会自带滤镜效果。解决办法:Drawable drawable = getResources().getDrawable(R.mipmap.ic_launcher).mutate();drawable.setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);imageView.setImageDrawable(drawable);//在Drawable源码中,m..原创 2020-08-17 15:42:42 · 1058 阅读 · 0 评论 -
onSaveInstanceState onRestoreInstanceState 在生命周期里的顺序
12-09 22:57:13.727 D/Lifecycle: onCreate12-09 22:57:13.879 D/Lifecycle: onStart12-09 22:57:13.889 D/Lifecycle: onResume--------------- 旋转画面 -----------------------12-09 22:57:19.375 D/Lifecycle: onPause12-09 22:57:19.375 D/Lifecycle: onSaveInstanceSt.原创 2020-08-11 11:03:28 · 433 阅读 · 0 评论 -
android 三种切回主线程更新UI的方法 handler.post runOnUiThread
一、前期知识储备(1)上官方文档:参见Handler类中的描述首先,post和postDelay都是Handler的方法,用以在子线程中发送Runnable对象的方法;其次,Android中post()方法可以直接在非UI线程中更新UI,不同与Handelr的Send类方法,需要进行切换;最后,两个方法在实现UI线程事件的时间上有所区别,postDelayed()方法用以延期执行,post则是立即执行;(2)Handler类的post类方法和send类方法联系与区别①po..转载 2020-07-30 13:19:39 · 3030 阅读 · 1 评论 -
android 异步执行方法
1.Handle//①定义一个Handleprivate Handler handler =new Handler(){ @Override //当有消息发送出来的时候就执行Handler的这个方法 public void handleMessage(Message msg){ super.handleMessage(msg); //做事 //do something; }};//②想要调用时handler.sendEmptyMes原创 2020-07-30 13:12:03 · 1419 阅读 · 0 评论 -
Java this关键字访问当前实例和外部类实例 和 :: 符号
类的内部使用this表示当前对象的引用。在一个类的内部使用this表示当前对象的引用,然而有时类的方法内部还有类的定义需要使用外部类的方法时就需要使用this对象,此时this只是内部使用类的对象,在内部类方法定义的类中如何引用外部类此时就要用到类名.this方法。Kotlin里用 this@类名 使用外部类实例类名.this表示外部类的实例。Class classA { private void main(){ this.methodA(0) //表示当前对象 }原创 2020-07-29 16:56:10 · 298 阅读 · 0 评论 -
Android 深入理解Loader机制 让APP轻装上阵
Android开发者都经历过APP UI开发不当 会造成overDraw,导致APP UI渲染过慢,但是很多人却没听过overLoad,overLoad一般是由于开发者在主线程操作耗时操作,导致程序变慢 甚至出现的anr的现象,那么android早已为这种现象提供完美的解决方案,就是今天给大家说的Loader机制。一 LoaderAndroid的装载器(loader)是从Android 3.0新引入的API , 主要完成单线程耗时数据异步装载功能,并在数据有更新自动通知UI刷新的作用。业内也叫加载器转载 2020-07-29 15:40:15 · 408 阅读 · 0 评论 -
Android混淆规则--proguard-rules.pro
#==================================【基本配置】==================================# 代码混淆压缩比,在0~7之间,默认为5,一般不下需要修改-optimizationpasses 5# 混淆时不使用大小写混合,混淆后的类名为小写# windows下的同学还是加入这个选项吧(windows大小写不敏感)-dontusemixedcaseclassnames# 指定不去忽略非公共的库的类# 默认跳过,有些情况下编写的代码与类库中原创 2020-07-27 15:22:13 · 3690 阅读 · 0 评论 -
Android中四种启动模式,最容易理解的小白教程
Android中四种启动模式,最容易理解的小白教程说起Android中的启动模式,其实是个很基础的内容,谁都知道是4中启动模式,没错分别是以下四种:1,standard2,singleTop3,singleTask4,singleInstance关于高深的纯理论说明这里就不多做赘述,毕竟文字说明太饶人,这里就准备说点简单的,能看得见的,现在开始吧。第一种:standard(默认)关于这种模式,大家都知道,就是Android默认的启动模式,就是不显示指定,就是这种模式。现在有F转载 2020-07-15 13:45:24 · 448 阅读 · 0 评论 -
关于捕捉home键和菜单键的调查
首先就是键的名称安卓底部有三个键,返回键,home键,菜单键(?)返回键,home键的说明没有争议。菜单键就有很多说法了:recent apps list,Task Switcher,Recent Tasks button,Overview,多任务键。(戻る,ホーム,マルチタスク)API 11之后KeyCode就变成了KEYCODE_APP_SWITCH,确实在adb里输入adb shell input keyevent KEYCODE_APP_SWITCH,反应跟按下菜单键一样。参考原创 2020-07-02 13:49:56 · 298 阅读 · 0 评论 -
kotlin作用域函数/内联函数let,with,run,apply,also的使用
判断空 省略 it/this 上下文对象 返回值 let 有 it Lambda result with 可 this Lambda result run 有 可 this Lambda result =let + with 可以省略this,也可以判断空 apply 可 th...原创 2020-06-26 19:18:24 · 345 阅读 · 0 评论 -
andrlid home按下监测方法
用BroadcastReceiver监听home按钮方法private class HomeButtonReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { Log.d("homekeytest","HOME 被按下") }}private var mHomeKeyReceiver: HomeButtonReceiver? =原创 2020-06-26 10:03:15 · 215 阅读 · 0 评论 -
junit 自动化测试 取得print的内容
使用ByteArrayOutputStream 和 System.setXXX便可以简单实现private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();private final ByteArrayOutputStream errContent = new ByteArrayOutputStream();private final PrintStream originalOut = System.out;原创 2020-06-04 15:59:27 · 2816 阅读 · 0 评论 -
Kotlin 空字符串null or empty的判断
値 isEmpty isNotEmpty isNullOrEmpty isBlank isNotBlank isNullOrBlank orEmpty var="" true false true true false true 空文字列 var=" " false true false true false true スペース var=null Error...原创 2020-06-04 13:14:37 · 4539 阅读 · 0 评论 -
android代码混淆个人总结及踩坑
android代码混淆个人总结及踩坑前言公司项目使用组件化开发的形式,需要对自己负责的模块进行一些混淆配置,关于混淆相信做android开发的都或多或少有过一些接触,通过对混淆文件的配置从而将代码中的类名,方法名,成员变量等进行无意义的字符替换达到增加反编译难度的作用,这篇文章主要要说的问题就是在学习混淆过程中自己的一些总结想法。混淆语法这个网上有很多关于这块的资料,说的也比较清楚了,无非就是keep ,keep class,keep classmembers,,*,...等混淆命令的使用,转载 2020-05-15 19:56:29 · 1416 阅读 · 0 评论 -
PendingIntent应用: Android Notification详解——响应notification事件
上一篇讲了如何创建并显示一个notification,这一篇就总结下点击notification后,程序应该如何响应。一般来讲,点击一个notification后,都会打开一个Activity做为对点击事件的响应,这个Activity是之前在PendingIntent中设置好的。经常玩Android手机的应该都有印象,在日历应用中,你新建一个提醒,当提醒通知收到后,你点击通知,会进入提醒的内容页面,如果这个时候按back键,会直接退出应用。但是在Gmail的应用中,如果有一封新邮件到来,那.原创 2020-05-14 14:17:33 · 555 阅读 · 0 评论 -
一篇文章搞明白Kotlin的companion object
很多人简单的Kotlin的object简单理解为静态。一般情况下是没有问题的,但是更准确的理解是object修饰的类是Singleton(单例)。在类的内部object 前加上 companion, 可以做成属于这个类的Singleton。class Hoge { object A { val fizz = "fizz" fun foo() { ... } } companion object { val buzz = "buzz" f.原创 2020-05-08 20:38:16 · 17350 阅读 · 0 评论 -
同一套代码,同一个apk,在同一个设备上安装为多个app
同一套代码,同一个apk,在同一个设备上安装为多个app。比如想要在同一个手机上安装一份debug版本,一份release版本。但是后面安装的总会覆盖前面安装,最终只能安装一份。安卓是用包名来区分apk的,如果包名相同,会被认为是同一个apk。所以我们要作为两个不同app安装的需要修改包名。在AndroidManifest.xml,<manifest xmlns:and...原创 2020-04-16 19:00:26 · 1154 阅读 · 0 评论 -
在Android设备上搭建小型 Web 服务器
在通用服务器/PC上搭建web服务器,我们通常用Apache,Tomcat,Nginx或者IIS。在Android 设备上我们也有很多种选择,比如Jetty,AndServer,NanoHTTPD等等。还有KSweb(里面集成了PHP、Nginx、Apache、MySQL、FTP), 可以直接安装搭建。其中比较常用的是Jetty,今天我们就利用jetty,手写一个简单的web程序。...原创 2020-04-15 16:59:40 · 1554 阅读 · 0 评论 -
原生、混合、react-native应用对比分析
原生开发、纯网页开发(H5开发)/混合开发(H5+原生)、React-Native开发原生开发是系统自带的app开发方式,也是大部分人最熟悉app开发的技术,如android、ios、wp。H5开发是Html5开发的app,本质上运行在手机浏览器中的页面,一般使用app做一个壳套用浏览器运行H5的页面,由于H5的特性也有很多app使用半原生半H5的hybird app 开发模式。介绍rea...转载 2020-04-15 11:21:35 · 3271 阅读 · 0 评论 -
不要太依賴Activity的生命周期, 不要依赖Activity变量,不主动保存恢复数据会发生意外。
很多人依赖Activity的生命周期来处理程序。这里面有很多坑需要大家注意。关于onSaveInstanceState,你需要知道这些知识 。1.startActivity或startActivityForResult时,把数据保存在activity变量里。onActivityResult之后再把保存在activity变量里的数据拿来直接用。一般情况下是没有问题的。从点下一个按钮star...原创 2020-04-09 14:42:23 · 188 阅读 · 0 评论 -
Android Studio调试,学会使用这个工具,干预程序,赋值,文件输出,瞬间变调试高手!
Visual stdudio 调试中的即时窗口Immediate Window, 还有chrome的JavaScript调式的Console窗口,非常好用。可以实时与程序互动。使用Android Studio开发时去怎么也找不到类似的窗口,只能简单的改变变量的值。直接在watcher里修改值,只能修改简单的基本数据类型。Boolean,String,Int之类。如果想往list里添加一...原创 2020-03-25 15:53:34 · 346 阅读 · 0 评论