自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(165)
  • 资源 (2)
  • 收藏
  • 关注

原创 Android/iOS APP备案流程

注:此处填写APP基础信息过程,需要云服务验证,可以使用ICP备案服务码,如果没有备案服务码,那么你需要一台阿里云中国大陆地域的云服务器,购买时长至少为3个月,为了节省成本可以在活动 aliyunbaike.com/go/aliyun 上选择一台云服务器ECS或轻量应用服务器,一台云服务器可以备案5个APP或备案5个网站域名。1) 在 备案订单预览信息页面中,请仔细核对您的备案信息,确认无误后,阅读和勾选我已阅读并同意《腾讯云隐私声明》、《相关条款》和《互联网信息服务备案承诺书》,并单击提交审核。

2025-04-30 09:43:07 584

原创 Flutter Container设置padding,margin,背景色,边框

1.magin属性设置:Container(child:Text组件,2.padding属性设置:Container(child:Text组件/Image组件,3.边框属性设置:Container(color:Color.black,//设置边框颜色width:4, //设置边框宽度),borderRadius:BorderRadiu.circular(10),//设置圆角用4.设置背景色:Container(color:Color.black,//设置背景色为黑色。

2024-11-28 14:04:33 900

原创 AI是在帮助开发者还是悄然取代开发者?

在科技日新月异的今天,人工智能(AI)已经渗透到我们生活的方方面面,从智能家居到自动驾驶汽车,从医疗诊断到金融分析,AI的应用场景越来越广泛。而在软件开发领域,AI的介入同样引发了广泛的讨论:它究竟是在帮助开发者提升效率,还是在悄然取代他们的位置?本文将探讨这一话题,分析AI在软件开发中的角色及其对开发者的影响。

2024-10-24 14:12:22 468

原创 防止电脑电池老化,禁止usb或者ac接口调试时充电

在命令行中输入 adb shell dumpsys battery set ac 0,以禁止 AC接口(typec) 充电。在命令行中输入 adb shell dumpsys battery set ac 1,以允许 AC接口AC接口 充电。在命令行中输入 adb shell dumpsys battery set usb 0,以禁止 USB 充电。在命令行中输入 adb shell dumpsys battery set usb 1,以允许 USB 充电。

2024-09-24 10:40:44 1461

原创 Flutter开发指南

任何时候需要变化,flutter 都会创建一个新的实例。对比来看,Android的 view 就只绘制一次,除非主动调用 invalidate。a.在android 中,view 是屏幕显示的基础,比如 button,文本,列表,输入框都是 view。2.flutter 的 widget 很轻量,原因是:widget 不是视图,也不直接绘制内容,它只是一个对UI和底层创建真正视图对象的语义描述而已。不同:1.widget 和 view 的生命周期是不同的,widget 是不可变的。

2024-05-29 14:19:20 506 1

原创 Caused by: kotlin.UninitializedPropertyAccessException: lateinit property rv has not been initialize

是一个修饰符,它允许你在声明时延迟非空属性的初始化,直到在类的构造函数或其他初始化代码块中实际设置它。是 Kotlin 中的一个异常,它通常发生在你尝试访问一个尚未初始化的延迟属性(,你也可以简单地声明一个可空类型的属性,并在需要时检查它是否为空。属性但在其被赋值之前就访问它时,Kotlin 运行时将抛出。属性之前对其进行初始化。这通常是在构造函数中或者在调用。在 Kotlin 中,方法之前的其他初始化代码块中完成的。为了解决这个问题,你需要确保在访问。或者,如果你不想使用。

2024-04-30 15:47:22 1768 1

原创 java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

不加addToBackStack(): new onAttach() -> new onCreate() -> old onPause()-> old onStop()-> old onDestroyView()-> old onDestroy()-> old onDetach() -> new onCreateView() -> new onActivityCreated() -> new onStart()。该异常出现的原因是:commit()在onSaveInstanceState()后调用。

2024-04-24 15:44:58 2129

原创 android开发 apk瘦身的步骤

移除未使用的代码和资源。在Android开发中,APK瘦身是一个重要的优化手段,可以帮助减少应用程序的大小,提高用户的下载和安装意愿。:尽量使用针对移动app的jar和类库,避免使用其他大型的jar包,因为它们不仅增加了包的大小,还增加了编译时间。:尽量使用针对移动app的jar和类库,避免使用其他大型的jar包,因为它们不仅增加了包的大小,还增加了编译时间。通过以上步骤,可以有效地对APK进行瘦身,减小应用程序的大小,提高用户的下载和安装意愿。:移除未使用的so文件和多余的库,进一步减小APK大小。

2023-12-29 10:46:56 494

原创 子类和父类可以同时实现Parcelable方法吗

需要注意的是,子类重写父类的writeToParcel()方法时,必须调用super.writeToParcel()以确保父类的字段也被正确写入Parcel。同时,如果子类添加了新的字段,需要在writeToParcel()方法中适当地处理这些字段的序列化。这意味着子类可以重写父类的writeToParcel()方法,或者添加新的字段和方法。总结来说,子类和父类可以同时实现Parcelable方法,但子类通常会继承父类的实现,除非有特定的需求需要重写或添加新的实现。

2023-12-29 10:40:41 610

原创 子类和父类可以同时实现Serializable方法吗

在Java中,如果一个类实现了Serializable接口,那么它的所有子类都会自动实现Serializable接口,不需要显式地继承或实现。在这个例子中,父类Parent实现了Serializable接口,而子类Child也实现了Serializable接口。由于Serializable是一个标记接口,Child类不需要实现任何方法。因此,如果一个父类已经实现了Serializable接口,它的任何子类都可以直接使用Serializable接口,不需要再次实现。

2023-12-29 10:27:26 757

原创 开发中-唯一标识符最佳做法

本文提供了根据用例为应用选择合适标识符的指导。如需大致了解 Android 权限,请参阅。有关使用 Android 权限的具体最佳做法,请参阅。

2023-11-16 17:26:08 359

原创 混合开发(Android原生与H5交互) 说明文档

目前,比如微信、QQ、淘宝、京东、知乎、各大银行App等大量软件都内嵌了部分H5。Android与H5(JS)互调可以让我们实现混合开发。混合开发就是在一个APP中内嵌一个轻量级的浏览器,一部分原生的功能改为Html5来开发。拿微信举例:微信属于以原生为主,H5为辅,App大部分页面用原生完成,小部分用WebView加载H5的模式。:就是Java代码和JavaScript之间的调用。什么时候使用Native,什么时候使用H5呢?1.的在图文排版,不在开发,很适合做辅助。

2023-11-14 16:44:41 1131

原创 kotlin修饰符const的含义

这是因为 const 属性的值在编译时就确定了,而非在运行时才确定,因此只有在编译时就能确定常量值的属性才能使用 const 修饰符。companion object 中定义的属性和方法可以在类的实例上直接访问,就像 Java 中的静态变量和静态方法一样,而且它们只有一个实例,这个实例在第一次访问时被创建,而且它的生命周期与类本身相同。而对于一个使用 class 关键字定义的类,它不是一个顶层属性,也不是一个基本类型或字符串类型的对象的属性,因此不能使用 const 修饰符。二. 使用const属性。

2023-10-19 20:51:12 1102

原创 Android 大图显示优化方案-加载Gif 自定义解码器

以上实际的加载优化已经完成,但是我们发现调用的时候需要as方法传入FrameSequenceDrawable,写起来很不方便,希望能改成类似于asgif这种调用方法,这个又需要使用到glide自带的APT技术了,换句话说我们需要使用一个注解。比如内存空间是1 2 3 4个格子,其中1和3是正在使用的内存,2和4是空闲内存,此时如果2和4单个的内存空间不够,那么就需要同时申请到2和4,由于2和4的空间不连续,所以就会导致申请失败。其中2和4这2个内存空间就被称为内存碎片,太小的碎片将无法使用,非常影响效率。

2023-09-03 09:50:09 886

原创 Android 界面置灰

1.Activity中:在Activity的OnCreate方法中设置。setViewGray(dialog的View);2.Dailog:直接调用。

2022-12-02 09:05:40 940

转载 Android 禁止输入表情符

Android 禁止输入表情符。

2022-11-30 10:03:10 581

转载 透明度色值一览

100%=00(全透明)00%=FF(不透明)

2022-11-15 13:26:24 3022

原创 解决Android Studio 不自动提示问题

解决Android Studio 不自动提示问题第一种 :一般是由于Android ButterKnife Zelezny插件导致的,在Settings=>Plugins里卸载掉后File---restart IDE 解决!

2022-10-31 13:20:36 4685 1

原创 Java Runtime (class file version 55.0), this version of the Java Runt

打开老项目报 Java Runtime (class file version 55.0), this version of the Java Runt。的jdk版本不一致;需要在Setting-Gradle-对JDK版本进行更改为一致版本即可。安装了最新的稳定版Android Studio 海豚。

2022-10-24 10:38:05 7540 1

转载 Looper的loop死循环为什么不会阻塞主线程

因为我们写的代码就是通过handler驱动起来的,我们activity的onCreate、onResume、onStop等等这些生命周期方法,包括我们的UI绘制的信号,这些UI绘制的事件都是通过Handler Looper循环内部发起的,来调用回调我们的各个Activity,各个Fragment等等这样的一些组件里面的各个生命周期方法,我们的代码就是在循环里面执行的,你说怎么会阻塞呢?你启动它,进入main方法,执行完所有的方法,也就会退出了,那么我们的应用程序你说总不能说执行完main方法就退出把?

2022-09-22 14:37:39 1888

原创 医院各领域榜单。22个科室、100种常见疾病

01 肾脏病主要疾病:尿毒症、慢性肾功能衰竭、肾炎、肾病综合征、多囊肾病、肾结石1、北京大学第一医院2、南京军区南京总医院3、上海瑞金医院4、中山大学附属第一医院5、解放军总医院6、复旦大学附属华山医院7、北京协和医院8、南方医科大学南方医院9、第二军医大学长征医院10、四川大学华西医院 02 泌尿外科主要疾病:尿路结石、肾上腺疾病、肾移植、前列腺疾病、性功能障碍等1、北京大学第一医院2、武汉同济医院3、上海长海医院4、解放军总医院5、四川大学华西医院6、北京协和医院7、天津医科大学第二医院8、中山大

2022-07-27 13:56:56 1877

原创 为什么要使用MVP架构

相对于MVC,把原来的UI逻辑抽象成View接口,原来的业务逻辑就抽象为Presenter接口,原来的Model还是原来的Model。思考newPresenter(this)时候将activity/fragment实例将给引用方会有内存泄漏的风险。并不是的,Jectpack是2018年google-IO出的,是一个为了开发App一整套的解决方案。在deatchView方法,将持有的View层实例释放--view=null;View层通过“View接口”来处理原来的“UI逻辑”;.........

2022-07-20 15:30:06 1354 2

原创 Android知识图谱

Android知识图谱

2022-07-12 14:04:42 754 1

转载 Android Studio Debug调试全篇

Android Studio Debug调试全篇

2022-06-22 13:55:46 9117 3

原创 栈 队列-通俗版

特性:栈:先进后出队列:先进先出栈:只能在表的一端进行 插入 和删除操作 的线性表队列:只能在表的一端进行插入 在另一端进行删除操作 的线性表

2022-02-10 17:18:35 221 1

原创 Activity View Window三者之间的关系-通俗版

activity就像是一个控制器view就是视图window就是一个窗户 用来显示view的承载模型activity在加载的时候 会初始化一个window :phoneWindowphoneWindow包含了一个根视图 RootViewRootView是通过“add”不断把子View添加进根视图里的 比如:textview iamgeView等等子View视图的监听又是交给了 WindowManageService去完成的, 将结果(事件)回调返回给Activity比如:onClickLi..

2022-02-10 17:14:11 532 1

转载 AMS和ActivityThread之间的Binder通信

开发日常在调用startActivity()的时候,实际上调用的是mInstrumentation.execStartActivity()再调用ActivityManagerNative.getDefault() .startActivityActivityManagerNative.getDefault 单例返回的就是ActivityManagerService的远程接口,即ActivityManagerProxy。public abstract class ActivityManagerNa

2021-12-23 17:07:38 632 14

原创 Instrumentation的含义和ActivityThread的关系

每个Activity都持有Instrumentation对象的一个引用,但是整个进程只会存在一个Instrumentation对象 。当startActivityForResult()调用之后,实际上还是调用了mInstrumentation.execStartActivity()startActivityForResult()------> minstrumentation.execStartActivity()方法。public void startActivityForResult(I

2021-12-23 16:38:38 1290 1

原创 Launcher的含义、如何启动的详解

当我们手指触摸屏幕上指定App图标Logo的时候,App就由Launcher开始启动了。Launcher到底是一个概念呢?Launcher本质上也是一个应用程序,和我们的App一样,也是继承自Activitypackages/apps/Launcher2/src/com/android/launcher2/Launcher.javapublic final class Launcher extends Activity implements View.OnClickLis.

2021-12-23 16:18:14 11837 1

原创 服务进程 APP进程间通信

明白了Android Framework的客户端服务器架构之后,那么我们的App进程本身和AMS(SystemServer进程)还有zygote进程 这三个独立的进程,他们之间如何通信呢? AMS:服务端对象,负责系统中所有Activity的生命周期zygote是一个进程 liunx加载的时候 fork出的一个系统进程1.App进程和与AMS通过Binder进行IPC通信,2.AMS(SystemServer进程)与zygote通过Socket进行IPC通信。AMS:Activit...

2021-12-23 15:56:11 1111 1

原创 Android系统里面的服务器和客户端的概念解析

服务器、客户端的概念不仅仅存在于Web开发中,在Android的框架设计中使用的也是这一种模式。服务器端指的就是所有App共用的系统服务,比如我们这里提到的ActivityManagerService,和前面提到的PackageManagerService、WindowManagerService等等,这些基础的系统服务是被所有的App公用的,当某个App想实现某个操作的时候,要告诉这些系统服务,比如你想打开一个App,那么我们知道了包名和MainActivity类名之后就可以打开打开App:知道Ap

2021-12-23 15:50:33 3070 1

原创 ActivityManagerService的含义和作用 初始化流程解析

ActivityManagerService,简称AMS,服务端对象,负责系统中所有Activity的生命周期ActivityManagerService进行初始化的时机,就是在SystemServer进程开启的时候,就会初始化ActivityManagerService。从下面的代码中可以看到顺序为:startSystemserver--> 初始化 AncitityManagerServicepublic final class SystemServer { //zygote.

2021-12-23 15:46:10 1575

原创 SystemServer的含义和作用

1.SystemServer是一个进程,并且是由zygote进程fork出来的 [zygote进程]2.Android Framework里面两大非常重要的进程: 1.SystemServer进程 2.zygote进程3.SystemServer比较重要的原因为: 1.系统级的重要服务都是在这个进程里开启的 比如: ActivityManageService、 PackgeManageService、WindowManageService等...

2021-12-23 15:34:04 2745

原创 zygote的含义和作用解析

zygote英[ˈzaɪɡəʊt]美[ˈzaɪɡoʊt]n. 受精卵;接合子[ 复数 zygotes ]1.当你的程序发生Crash的时候,打印的Error log下面通常携带有这一个单词显示出来2.Android是基于Linux系统的,在Linux系统中,所有进程都是由init进程直接或间接fork出来的,zygote进程也是一样。3.在Android中,zygote是一个进程名字。因为Android是基于Linux系统的,当你的手机开机的时候,Linux内核加载完之后 会...

2021-12-23 15:07:48 2516

原创 Activity启动过程梳理

ActivityManagerServices,简称AMS,服务端对象,负责系统中所有Activity的生命周期 ActivityThread,App的真正入口。当开启App之后,会调用main()开始运行,开启消息循环队列,这就是传说中的UI线程或者叫主线程。与ActivityManagerServices配合,一起完成Activity的管理工作 ApplicationThread,用来实现ActivityManagerService与ActivityThread之间的交互。在ActivityM...

2021-12-23 14:58:03 128

原创 android.view.WindowManager$BadTokenException

该异常表示不能添加窗口,通常是所要依附的view已经不存在导致的。[解决方案]:Dialog&AlertDialog,WindowManager不能正确使用时,经常会报出该异常,原因比较多,几个常见的场景如下:1.上一个页面没有destroy的时候,之前的Activity已经接收到了广播。如果此时之前的Activity进行UI层面的操作处理,就会造成crash。UI层面的刷新,一定要注意时机,建议使用set_result来代替广播的形式进行刷新操作,避免使用广播的方式,代码不直观且容易出错。.

2021-12-22 16:09:34 837

原创 java.lang.UnsatisfiedLinkError libc: Access denied finding property “itouch.predict_opt“

记录:在做一个旧项目迁移AndroidX的过程中,运行特定模块(腾讯云人脸核身)报libc: Access denied finding property "itouch.predict_opt" 异常出现此类异常的原因是 引用到的三方依赖/jar.aar包等 没有兼容AndroidX版本需要集成相应库的androidX版本即可...

2021-12-22 15:56:30 1261

原创 Kotlin java.lang.IllegalStateException: must not be null

在Fragment中一直报错说不能为空。然后进行Google:得出结论,通常我们把initView方法写在onCreateView方法中,但是这个时候view可能并没有返回,所以就找不到,所以我们要把初始化操作放在onActivityCreated或onViewCreated中只要把View视图赋值 或者控件放到 onViewCreated 中初始化即可:override fun onActivityCreated(savedInstanceState: Bundle...

2021-12-21 14:07:01 1675

转载 Kotlin中 各符号的含义 ?

Kotlin中 ?、!!、?:、:: 、->符号的含义Kotlin 中新增了一些符号,先记录在案,方便理解和学习。1. ? 和 !!"?"加在变量名后,系统在任何情况不会报它的空指针异常。"!!"加在变量名后,如果对象为null,那么系统一定会报异常!上述是两个符号的简单概念,为了更好的解释这两个概念,我们先从java代码入手,如下例:ArrayList<String> myList = null; // 创建一个null的队列Log.d("TAG",..

2021-12-06 14:21:30 938

原创 Kotlin 概述【官方】

支持多平台编程是 Kotlin 的主要优势之一。它减少了为不同平台编写和维护相同代码所花费的时间,同时保留了本机编程的灵活性和优势。这就是 Kotlin Multiplatform 的工作原理。 Common Kotlin包括语言、核心库和基本工具。用普通 Kotlin 编写的代码适用于所有平台。 借助 Kotlin 多平台库,您可以在通用和特定于平台的代码中重用多平台逻辑。公共代码可以依赖于一组涵盖日常任务的库,例如HTTP、序列化和管理协程。 要与平台互操作,请使用特定

2021-11-23 14:00:50 7930

ECTranslation2 Plugin

ECTranslation2 Plugin

2022-11-16

人脸核身SDK AndroidX版本.zip

人脸核身SDK AndroidX版本.zip

2021-12-22

PayPasswordDemo.zip

Android 6位支付密码 密码输入框 极简单的代码实现, //去支付按钮 tvMainPop = findViewById(R.id.tv_main_pop); tvMainPop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //屏幕阴影变暗 setDarkWindow(true); PassValitationPopwindow mPassValitationPopwindow = new PassValitationPopwindow(MainActivity.this, tvMainPop, new PassValitationPop[removed]() { @Override public void onSuccess(String code) { Toast.makeText(MainActivity.this, "您输入的密码为:" + code, Toast.LENGTH_SHORT).show(); //todo 去做业务逻辑 code为输入的6位密码 } }); mPassValitationPopwindow.setOnDismissListener(new Popup[removed]() { @Override public void onDismiss() { //去除背景变暗 setDarkWindow(false); } }); } });

2020-04-20

空空如也

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

TA关注的人

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