自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 FragmentManager is already executing transactions异常

Activity中添加了一个Fragment1,在Fragment1的onViewCreated方法中回调Activity中。Activity继承了接口IAction,其方法中打开Fragment2。方法打开界面Fragment2,发生错误。方法造成的,将其修改为。

2023-09-08 18:35:39 1225

原创 Android apk文件打包自定义命名

在Android Studio中打包生成的APK和aar文件基本上都是module名称+构建类型,常见的都是和这种样式的。显然没有版本号等序号标识的话,管理起来会比较混乱,基于此种情况,我们可以通过修改文件中的配置来修改生成包的文件名以做区分。

2023-05-15 20:46:56 3323 1

原创 flutter doctor出现 Unable to find bundled Java version

【代码】flutter doctor出现 Unable to find bundled Java version。

2023-04-12 14:07:46 1227

原创 Android独立Module运行

Android组件化中我们经常会将逻辑组件到各个Module中,为了进一步提高开发效率,避免不必要的编译时间浪费,我们可以通过对Module中build配置进行进行设置,以使各个业务单元模块Module可以独立运行。通过修改gradle配置可以调整我们要运行的Module,这对于我们的组件化开发和调试有着极大的便利。

2022-10-03 15:35:17 1708

原创 Android中依赖版本统一管理

使用config.build文件实现Android中依赖的统一管理

2022-09-22 11:32:49 1046

原创 约束布局ConstraintLayout基础使用

约束布局ConstraintLayout作为Google官方推荐的layout布局文件,是一个和线性布局LinearLayout,相对布局Relativelayout相似的ViewGroup。约束布局的出现主要是为了能够让布局的设计更加的扁平化,优化布局嵌套问题,能够更加灵活的调整和控制其中的子View。约束布局支持API 9以上的Android系统上使用。

2022-09-06 11:21:28 2108

原创 代码内执行adb shell指令

代码中执行adb shell指令并打印输出结果

2022-07-12 11:25:09 1016

原创 Java代理复习

基本概念代理就是一个对象的代理对象,代理对象存在的价值主要(不是唯一)就是对访问真实业务对象进行拦截,使用者不需要直接访问被代理的对象,通过访问代理对象就能够调用到被代理对象的方法。代理模式(Proxy)是通过代理对象访问目标对象,这样可以在目标对象基础上增强额外的功能,如添加权限,访问控制和审计等功能。简单类图如下:一、Java中的代理Java中的代理分为静态代理和动态代理。静态代理比较简单,就是按照上面的类图进行书写,设置代理类即可。动态代理是基于Java反射原理构建,能够在代码运行时构建

2022-04-29 10:27:51 69

原创 Android屏幕尺寸适配常见方案smallestWidth

前言介于目前的Android设备存在有不同的屏幕尺寸,屏幕分辨率,像素密度,Android应用在开发的过程必须要考虑到屏幕尺寸适配的问题,以保证在不同尺寸的Android设备上都能够正常运行。基本概念在开始说明适配方案之前,我们首先需要对如下几个概念了若指掌:屏幕尺寸,屏幕分辨率,屏幕像素密度。1。 屏幕尺寸屏幕尺寸是指的设备对角线的物理尺寸,常用单位为英寸。1英寸 = 2.54cm2. 屏幕分辨率屏幕分辨率指的是设备在横向、纵向上的像素总和,常用宽*高的方式来描述。宽指的是在横向上

2022-04-27 19:22:59 8397

原创 Android APP开机自启动基本方法

Android开机自启动基本方法

2022-04-20 10:47:28 8665

原创 Serializable和Parcelable序列化

前言Android中常用的序列化方式包含有两种: Serializable和Parcelable。其中Serializable是java中通用的对象序列化方法,在Android实际内存操作时会更加偏向于实现Parcelable接口。一、序列化和反序列化序列化由于存在内存中的对象都是暂时的,无法长期贮存,为了把对象的状态保持下来,这是需要把对象写入到磁盘中或者其他介质中,这个过程就叫做序列化。反序列化是序列化的反向操作。概括性来说序列化是指将对象实例的状态存储到存储媒体(磁盘或者其他介质)的过程

2022-03-14 11:48:44 3013

原创 AIDL简述

前言AIDL,Android Interface Definition Language,Android接口定义语言,可以使当前的应用绑定一个其他进程的Service,调用远程服务实现跨进程通信。一、基本使用首先我们要说明的是AIDL可以实现进程间通讯,我们则需要有两个APP进程,分为服务端和客户端,服务端设置被调用的Service,而客户端则是去调用服务端的Service中的内容,在此以两个APP为例进行说明。1. 服务端AIDL文件创建我们首先建立一个APP工程作为服务端,右键新建一个AIDL

2022-02-17 15:00:00 395

原创 Android Service复习

Service概念Service是Android中的四大组件之一,和Activity一样继承自Context,但是Service没有UI界面,是可以在后台运行的应用组件。分类Service包括有不同的类型:前台Service,后台Service,绑定Service。前台Service:前台服务可以执行一些用户能够注意到的操作,例如音频播放器可以使用前台服务来播放音频文件,前台服务会显示通知,提示用户当前的服务正在执行。后台Service:后台Service可以在应用后台执行用户不会直接注意

2022-02-14 15:48:04 1103

原创 Protobuf在Android中的基本使用

前言Protobuf,类似于json和xml,是一种序列化结构数据机制,可以用于数据通讯等场景,相对于xml而言更小,相对于json而言解析更快,支持多语言。一、Proto文件示例Protobuf使用.proto文件来定义数据格式,所以我们首先新建立一个person.proto文件,并在文件中填下如下内容://指定proto的版本为proto3,不写的话默认为proto2.syntax = "proto3";//包名package proto;//引入包//import "";//指定生

2022-01-28 11:57:34 4667

原创 错误Binder invocation to an incorrect interface

AIDL错误:Binder invocation to an incorrect interface

2022-01-20 14:09:34 2870

原创 Android APT技术学习

Android APT技术简单说明,仿照Butterknife实现了View的自动绑定demo

2021-12-27 00:23:25 2252

原创 Java注解备忘

基本概念注解,Annotation,是在JDK 1.5 及后续版本引入的一个特性,可以声明在类,字段,方法等前面,用来对这些元素进行说明和注释。一、元注解Java中定义了一些元注解,用来对其他annotation进行说明,主要包括有如下四个:@Target@Retention@Documented@Inherited下面我们对每一个元注解的作用及常用参数进行说明。1. @Target该元注解用来描述注解的使用范围,即被标识的注解能够用在什么地方。常用的取值如下:CONSTRUCT

2021-12-26 23:24:16 385

原创 Android Gradle打包自定义打包名称

Android在打包时使用了Gradle进行打包,可以在model的`build.gradle`文件中对输出的apk文件进行重命名处理,为文件名上添加上版本号和打包时间。

2021-12-08 10:34:32 1809

原创 Android设备基本信息获取

Android设备的基本信息获取方式,主要内容包括如下几项:屏幕的基本信息,包括屏幕的尺寸及密度CPU的频率信息,包括最大频率,最小频率以及当前频率CPU核心数CPU的架构,支持的指令集CPU的详细完整信息设备Model型号Android系统版本RAM大小,SD存储大小

2021-12-08 10:23:30 899

原创 Android Jetpack组件学习(一):LifeCycle

前言Lifecycle是Google推出的用于处理Activity和Fragment的生命周期相关问题的组件,是一种观察者模式的结构。使用lifeCycle能够在生命周期的拥有者和观察者之间建立一种监听关系,当拥有者的生命周期发生变化时观察者能够及时监听到并作出对应的处理,同时观察者能够非常方便的判断当前拥有者的生命周期是什么。从上面的描述上看,显然LifeCycle的使用场景是和Activity和Fragment的生命周期相关的业务逻辑。举例来说,在MVP结构中,Presenter需要感知到Act

2021-11-09 15:58:54 2186

原创 Android View Binding概述及基本使用

前言使用kotlin语言进行Android开发的朋友们肯定对Kotlin-android-extensions插件不陌生,这个插件可以帮助我们节省findviewbyid()的书写。在不需要添加其他的代码的情况下,我们就可以直接在kotlin代码中直接使用xml定义的控件id来直接调用控件,其余的工作都由插件自动完成。这个插件在Android开发中可以说是非常方便了,尤其是复杂的页面中包含大量的View的情况下,可以为我们省略的大量的琐碎代码的书写。但是自Android Studio4.1之后,每当我们

2021-11-08 01:43:08 3725

原创 Android二维码的基础使用(三):二维码扫描Demo实现

前言在前两篇文章中,我们讲述了二维码的生成、保存和分享的内容,本次我们对于二维码的扫描的内容进行说明,实现一个简易的Android扫一扫功能。系列文章:Android二维码的基础使用(一):利用Zxing生成自定义二维码Android二维码的基础使用(二):保存和分享Android二维码的基础使用(三):二维码扫描Demo实现一、lib库说明扫描二维码同样需要引入zxing库,但是由于原生的zxing库使用在自定义特性上支持一般,于是在此我选择引入了辅助库:implementation 'c

2021-11-02 18:25:12 1288

原创 Android二维码的基础使用(二):保存和分享

概述在上期文章中,我们提到了Android二维码的自定义生成,本期主要包含的内容如下:将二维码以图片的形式保存到指定的目录。如何调起系统分享实现二维码分享到其他应用。系列文章:Android二维码的基础使用(一):利用Zxing生成自定义二维码Android二维码的基础使用(二):保存和分享Android二维码的基础使用(三):二维码扫描Demo实现一、保存至本地要将二维码保存到本地到指定目录,必然涉及到文件操作,可以通过文件IO流保存的方式将二维码进行保存,同时发送广播更新图库,主要

2021-11-02 18:24:06 916

原创 Android二维码的基础使用(一):利用Zxing生成自定义二维码

概述二维码的应用已经可以说是非常广泛了,那么如何在当前的app项目中生成自定义二维码,本文对采用Google开源库Zxing去生成二维码的流程进行简单说明。系列文章:Android二维码的基础使用(一):利用Zxing生成自定义二维码Android二维码的基础使用(二):保存和分享Android二维码的基础使用(三):二维码扫描Demo实现使用1. 引入jar包build.gradle文件中引入jar包。implementation 'com.google.zxing:core:3.3.0

2021-11-02 18:22:04 3695

原创 Android网络状态获取及NetworkCallback简述

前言在APP的开发中,获取到网络的链接状态是一个经常使用到的方法。除了可以使用ping指令来判断当前的网络状况之外,还可以直接通过ConnectivityManager来对网络状态进行判断。一、网络判断旧方法(deprecated)权限申请如果要获取网络信息,首先是需要申请网络权限:<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />判断网络使用ConnectivityManager可

2021-03-30 14:27:37 4470

原创 错误Attempted to add a toast window with bad token null. Aborting.

问题描述日前在做的项目中遇到了一个问题是悬浮窗在弹出时总是出错,系统是Android7.1.1。问题具体错误日志如下:[16:10:30]01-11 16:10:01.247 W/WindowManager( 448): Attempted to add a toast window with bad token null. Aborting.[16:10:30]01-11 16:10:01.249 W/System.err( 2948): android.view.WindowManager$B

2021-03-22 16:47:04 627

原创 Android中调用Ping操作及结果分析

实现方法android中调用ping命令需要使用Linux底层的命令:ping -c 1 -w 10 ip其中参数-c 1指的是ping的次数为1,参数-w 10指的是超时时间,单位为秒,超过10s则本次ping失败。参数ip指的是ip地址。Android中调用ping的方法如下:Process process = Runtime.getRuntime().exec("ping -c 1 -w 10 " + ip); //执行ping指令结果解析调用ping之后的结果(以百

2021-02-19 11:22:16 3244 2

原创 RecyclerView的使用(一):基本使用

前言对于从事Android开发的朋友们来说,RecyclerView大家肯定都不陌生,这是一个和listView有些相似的列表结构控件,可以实现一些基本的列表的显示及事件内容。本期对于RecyclerView的一些基本使用做些简单的说明,如果您已经对Recyclerview的使用非常熟悉,可以选择跳过此篇文章。基本使用RecyclerView的使用步骤比较简单,主要包含如下几步;包引入,引入对应的RecyclerView包设置布局文件,主要包括引入的布局文件将RecyclerView作为一个控件

2021-02-18 18:51:46 433 1

原创 RecyclerView的使用(二):添加头部和尾部

前言Recyclerview作为Android的常用控件之一,相信大家对它应该是十分熟悉了,不熟悉的朋友可以参考我之前发的文章 RecyclerView的基本使用,其中包括有单item及多Item的基本使用。但是我们发现Recyclerview中没有提供方法直接添加headerView和footView。对于我们自己去使用来说还需要从getItemViewType方法中进行重写,根据不同的类型添加不同的item布局,具体实现可以参考 RecyclerView的基本使用 中多item的使用。下面讨论下如何

2021-02-18 18:48:42 2326 1

原创 Android 动态权限备忘

概述Android在Android 6.0版本时提出了动态权限概念,在Android 6.0之上的系统上安装的APP需要手动去申请部分重要权限。在6.0之前,Android应用中的权限使用只需要在AndroidManifest.xml文件中配置对应的权限,那么就只会在安装时显示出当前应用所需要的权限,安装之后就可以持续使用。在6.0之后,Android中的权限除了需要在AndroidMainfest.xml文件中进行配置,部分核心权限必须在应用中向用户进行申请,需要用户主动点击才能够进行使用。在6.

2021-02-10 18:10:16 177

原创 CWAC-SafeRoom数据库加密

概述对于Room数据库,SQLCipher加密并不能够直接支持,因此CWAC-SafeRoom便应运而生。CWAC-SafeRoom是一个用来方便Room数据库加密的框架,该项目底层同样是采用SQLCipher原理实现,只是更加适用于Room数据库框架。使用1. 包引入使用此框架,首先需要引入对应的lib包。由于androidx的变动,该内容有着两个版本的包引入,分别适用于androidx版本和旧版的Android support包版本,示例如下:Androidx版本repositories

2021-02-01 20:53:34 1016

原创 数据库加密错误file is not a database

问题描述日前在调研数据库加密是在书写demo时发现了一个错误:file is not a database: , while compiling: select count(*) from sqlite_master问题分析从日志上来看应该是当前的文件并不是一个数据库,但是此数据库在未加密之前能够正常工作,添加了加密之后反而报错。查询了资料之后得知,如果数据库需要加密,那么需要去重新重建数据库。原因是之前的数据库是没有加密的明文文件,在采取了加密措施之后框架会以文件已经被加密的方式去读取文件,这

2021-02-01 15:15:07 10220

原创 UncaughtExceptionHandler示例使用

概述UncaughtExceptionHandler是用来catch线程内的没有被捕获到的exception,可以在uncaughtException方法中对这些异常进行统一处理。用法UncaughtExceptionHandler是一个接口,需要我们手动去实现一个类,如下:class CrashHandler(var mContext: Context) : Thread.UncaughtExceptionHandler { var threadCrashHandler: Thread.U

2021-01-31 17:08:51 441

原创 Activity和Fragment状态保存和恢复

概述日前在Fragment状态保存时翻了一个错误,造成了一些crash错误,因此查询资料对于activity和fragment的状态保存做了一个简单的总结。一、Activity状态保存说道activity的状态保存,就不得不提到activity的生命周期。activity的生命周期是一个老生常谈的问题了,activity的生命周期主要包括如下几个方法:onCreateonStartonRestartonResumeonPauseonStoponDestory主要流程如图所示。

2021-01-31 16:52:05 981

原创 错误Circular dependencies cannot exist in RelativeLayout

问题描述日前在检查crash日志时发现了如下的错误:java.lang.IllegalStateException: Circular dependencies cannot exist in RelativeLayout问题分析错误日志提示是在RelativeLayout中存在了循环依赖导致的。所谓的循环依赖其实就是指的互相定位。在RelativeLayout这一相对布局中,我们需要设定一个View针对另外的View的相对位置,也就是需要至少一个View作为基准被另外的View进行相对位置设定

2021-01-28 10:18:12 1743

原创 Android中 Sqlite数据库使用

概述Sqlite数据库是Android系统内常用的数据存储的方式之一,还有其他几种存储方式:文件存储,SP存储等。SQLite是一个进程内的轻量级嵌入式数据库,它的数据库就是一个文件,实现了自给自足、无服务器、零配置的、事务性的SQL数据库引擎。它是一个零配置的数据库,这就体现出来SQLite与其他数据库的最大的区别:SQLite不需要在系统中配置,直接可以使用。且SQLite不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite可直接访问其存储文件。Sqlite具有如下特点:存储

2021-01-25 16:00:41 350 1

原创 SharedPreferences和MMKV使用

概述本文主要简述SharedPreferences存储的使用及优劣势,以及MMKV内容。一、SharedPreferencesSharedPreferences(以下使用SP简称)是在Android中的一种轻量级的存储方式,支持开发者将基本类型数据以键值对的形式进行存储。SP具有在应用内数据可以共享,使用简单方便的优点。SP会将数据以文件的形式进行存储,具体路径:/data/data//shared_prefs/下面对于SP的使用进行简单说明。使用使用SP首先需要需要获取SP对象,可以通

2021-01-22 17:18:14 619

原创 GreenDao没有生成DaoMaster,DaoSession,DAO错误

问题描述日前学习GreenDAO数据库框架,使用kotlin语言开发了demo练习。 在demo中引入GreenDAO配置之后,新建实体类并进行buid编译,但是却没有生成实体类对应的DaoSession,DaoMaster和DAO文件,但是却并没有什么错误提示。问题分析反复检查了代码之后没有发现有什么问题,就去查看GreenDAO说明文档,在其文档上发现了一句备注:从这句备注上提示我们GreenDAO实体类必须要采用Java来进行书写,不能够使用kotlin。按照上述方法,将实体类改成了Ja

2021-01-20 15:22:09 2061

原创 GreenDAO数据库引入时gradle报错

问题描述日前学习GreenDAO数据库的使用,在配置gradle是遇到了如下错误:Unable to find method 'org.gradle.api.tasks.TaskInputs.property(Ljava/lang/String;Ljava/lang/Object;)Lorg/gradle/api/tasks/TaskInputs;'org.gradle.api.tasks.TaskInputs.property(Ljava/lang/String;Ljava/lang/Object;

2021-01-20 11:12:09 623 1

原创 Android7.1悬浮窗自动消失解决办法

问题描述日前在做一个悬浮窗需求悬浮窗,在Android 7.1模拟器上悬浮窗会显示几秒钟就自动消失。问题分析发现问题后首先查看日志,没有发现异常。然后翻看代码是否有remove掉悬浮窗的地方,也没有出现。没有发现其中的问题,选择了百度查询。在一篇博客中发现了有开发者遇到过类似的问题,实测有效,在此进行记录。解决办法文章中提到在许多Android 7.1手机上都出现了此问题,然后提到可以通过重置WindowManager的type进行解决。在7.1上可以将原设定的WindowManager.

2021-01-14 18:36:36 1960 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除