- 博客(41)
- 收藏
- 关注
原创 运算逻辑符的短路特性
此处使用了“||”的或操作符。只要getPassword == null成立,isEmpty方法就不会被调用,也就不会返回空指针异常。isEmpty的字符串判空出现了空指针的问题,这是因为getPassword方法返回了一个null对象。通过利用短路特性,我们可以更加高效地进行条件判断,避免不必要的计算,同时避免空指针异常等问题的发生。使用这种写法时,即使 getPassword方法返回了null,也不会影响代码的执行。当我们使用逻辑与(&&)、逻辑或(||)操作符进行计算时,会出现短路特性。
2024-06-27 14:45:36
270
原创 Android使用data uri启动activity或service
在AndroidManifest.xml文件中,我们可以设定activity或service的data。在完成对activity或service的配置之后,我们可以通过adb shell命令启动他们。
2024-06-18 14:19:21
364
1
原创 Android动态设置淡入淡出动画
我们不应该像淡出动画那样,在动画结束时才设置可见度,因为组件不可见时,附加在它之上的动画自然也不可见了。此时不会是一个组件淡出,而是在动画时长结束后直接显示出该组件。对于一个组件,当我们要用一个淡出动画隐藏它时,需要设置的值包括透明度alpha和可见度visibility。但对于淡入动画,如果在设置淡入之前,已经使该组件淡出,我们首先要回调刚才设置的visibility为可见的VISIBILE,如此一来,才能使我们的淡入可见。设置淡出动画不是问题,难点在于淡入动画。
2024-05-21 17:32:39
391
原创 使用命令删除zip中的文件
为实际的文件名和路径,使用正确的路径分隔符。如果文件夹名或任何路径组成部分包含空格或其他特殊字符,请使用引号。在Windows系统上,可能要安装额外的压缩工具如7-zip,才能在命令行中执行这类操作。执行这些命令时,它们会更新原始的 ZIP 文件,并从中移除指定的文件夹和包含的内容。始终建议在执行这类操作前备份原始的 ZIP 文件,以防不测。要删除zip文件中的某个文件,可以使用zip工具的-d(delete)选项。请注意,在 Windows 系统的命令行中,通常使用后斜杠(在上述命令中,确保替换。
2024-04-30 10:15:13
518
1
原创 Java创建对象的最佳方式:单例模式(Singleton)
单例模式是java中最简单的设计模式之一,属于创建式模式,提供了一种创建对象的最佳方式。具体而言,单例模式涉及到一个具体的类,这个类可以确保只有单个对象被创建。它包含一个访问其唯一对象的方法,供外部直接调用,而不需要创建这个类的示例。简而言之,可以不再new一个他的实例,而是直接调用方法。
2024-04-24 11:26:28
1087
1
原创 Android中的Context
而回到开发中的例子,比如我们在和朋友聊天时,此时的context就是聊天界面和相关数据的传输(如我们发送的消息、收到对方发送的消息),他在加载资源、启动Activity、获取系统服务、创建View等中都有一腿,不愧为上下文的称号。为什么说只是不适用于组件的开发?在Android开发中,当我们要创建或启动四大组件时,不能通过简单的new关键字实现,而是要通过他们的上下文环境,也就是我们要讨论的Context。Android的应用模型是基于组件的应用设计模式,而组件的运行需要一个完整的Android工程环境,
2024-04-15 19:45:40
393
原创 Android的LiveData
LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 activity、fragment 或 service)的生命周期。这种感知能力可确保。若观察者(Observer)的生命周期处于或状态,则LiveData会认为该Observer处于活跃状态。LiveData只会将更新通知给活跃的Observer。您可以注册与实现接口的对象配对的观察者。有了这种关系,当相应的对象的状态变为时,便可移除此观察者。
2024-02-22 15:19:03
1513
原创 Android的ViewModel
ViewModel组件用于存储和公开界面所使用的状态(UI State)。界面状态(UI State)是经过ViewModel转换的应用数据。界面(UI)是相对于用户而言的,界面状态是相对于应用而言的,例如一个开关switch展现在用户面前,而switch是开还是关,就是switch的界面状态。因此,对于界面状态的任何改变,都会直接影响界面。ViewModel会存储应用相关的数据,这些数据不会在activity被销毁并重新创建时被销毁。
2024-02-21 17:04:55
1482
原创 Android的Compose
如果需要将一个函数转换为Composable function,我们需要添加注解“@Composable”。) {MessageCard("Android")//使用我们自定义的Composable function@Composable//添加注解,使该函数成为Composable function")
2024-02-19 15:53:20
3256
1
原创 Android中的MVVM
开发常用的框架包括MVC、MVP和本文的MVVM,三种框架都是为了分离ui界面和处理逻辑而出现的。mvp、mvvm都由mvc演化而来,他们不属于某种语言的框架,当存在ui页面和逻辑代码时,我们就可以使用这三种模式。model和view分别指的是和,前者用于存储数据,后者用于展示前者的数据。在不同的框架模型中,model和view可能会有所差别,但基础功能基本不变,差别在于数据的传输方式。
2024-02-07 17:44:13
991
原创 Handler
我们知道,android是不允许在子线程中更新ui的,但是为了避免anr,我们有时候不得不在子线程中去执行一些耗时操作,然后根据这些耗时操作的执行结果来更新ui界面。对于这种情况,android提供了一套异步消息处理机制。
2024-01-05 11:06:39
550
原创 kotlin的多线程编程
如何启动这个线程?我们创建的myThread是MyThread实例,它是一个实现了Runnable接口的对象,所以我们可以直接把他传入Thread的构造函数中。接着我们再调用Thread的start方法,run方法中的内容就开始在子线程中运行了。
2023-11-30 20:42:36
1217
原创 kotlin中的序列化
我们可以在Intent中通过putExtra方法来添加要传递的数据,但该方法所支持的数据类型是有限的,当我们想传递一些自定义对象的时候,会发现无从下手。而使用Intent来传递对象,通常有两种实现方式:Serializable和Parcelable。
2023-11-29 21:39:13
733
1
原创 kotlin中的service
虽然Service是在Activity里启动的,但是在启动了Service之后,Activity与Service基本就没有什么关系了。比如说,目前我们希望在MyService里提供一个下载功能,然后在Activity中可以决定何时开始下载,以及随时查看下载进度。新增了两个分别用于绑定和取消service的按钮,而与service绑定的,自然是activity,绑定之后就可以使用Binder中的方法了。修改完成之后,我们看看要如何在activity中调用service中的这些方法。
2023-11-28 14:52:41
474
原创 kotlin的文件存储
openFileOutput方法获得一个FileOutputStream对象,将其传入OutputStreamWriter方法,即可获得一个OutputStreamWriter对象,再将其传入BufferedWriter方法,此时我们就可以通过它写入内容到文件中了。我们创建了一个文本输入框,此时我们输入内容再点击返回键,输入的内容肯定就消失了,因为他只是瞬时数据,点击返回键时activity被销毁,而它的数据也会被回收。反过来,程序读取计算机的内容,或者说计算机向程序输入内容,这就是。
2023-11-28 11:39:43
874
原创 kotlin的fragment
先从最简单的开始:一个页面包含左右两个fragment。新建FragmentTest,新建一个左侧fragment的布局再新建一个右侧fragment的布局接着新建LeftFragment类,并继承ragment,此处继承的Fragment一定要是AndroidX库中的。修改此时可运行。
2023-11-27 22:31:23
616
原创 Kotlin的自定义控件、Adapter
引入布局的技巧解决了重复编写布局的问题,但如果遇到响应事件的情况时,仍然需要在每个Activity中重复编写这些响应事件。而这种情况我们最好使用自定义控件来解决。因为是使用系统现成的控件进行编写,在最开始是我们编写的自定义控件,需要继承系统的控件。//TitleLayout的主构造函数,在布局中引入该控件时就会调用这个方法//init的初始化代码块,在创建类实例对象时执行init {现在自定义控件已经创建好了,让我们在布局文件中引用它,修改init {//返回按钮的点击事件。
2023-11-25 23:33:47
1362
1
原创 Kotlin中的OkHttp
在开源盛行的今天,有许多出色的网络通信库可以替代原生的HttpURLConnection,而其中OkHttp无疑是做得最出色的一个。
2023-11-22 19:59:58
1372
原创 Kotlin的ContentProvider
ContentResolver基本用法创建自己的给程序的数据提供外部访问接口如果一个应用程序通过对其数据提供了外部访问接口,那么任何其他的应用程序都可以对这部分数据进行访问。ContentResolver基本用法对于每一个应用程序来说,如果想要访问ContentProvider中共享的数据,就一定要借助类,可以通过Context中的方法获取该类的实例。
2023-11-16 17:02:54
165
1
原创 Kotlin中的并发
在Android系统上,应用程序可能不会执行许多的计算,反而会花费大量时间用来等待——无论是等待从服务器获取天气数据,等待从数据库检索用户数据,还是等待电子邮件到达。同时,阻塞主线程会冻结UI并在一段时间后导致异常发生,从而导致非常严重的用户体验。首先有几个极为容易混淆的术语:并发、并行、多任务、多线程。使用现实生活中的例子来解释的话,可以将:并行想象成一群正在进行网球表演的人,每个人都在进行各自的表演:把球扔到地面使其弹跳、或把他扔到空中等等。并发。
2023-10-05 17:06:51
531
原创 Kotlin的协程
在开发程序中时常会遇到一些耗时操作,如网络IO、文件IO、CPU/GPU密集型任务等,这些操作会阻塞线程直到操作完成。线程阻塞问题除了通过开启新线程来解决,还可以使用协程来解决。协程挂起:协程提供了一种使程序避免阻塞且更廉价可控的操作,协程挂起不阻塞线程;简化代码:让原来“异步+回调”方式写出的复杂代码,简化成可以用看似同步的方式表达。
2023-10-04 11:31:19
118
1
原创 Kotlin中的Gradle
左上角【File】->【New Project】->【Project】,出现以下画面,如下勾选在配置Gradle时,需要连接网络下载资源,不然会出现配置失败的情况。
2023-09-29 16:46:17
4935
原创 Kotlin中的泛型
现实生活中,在整理物品时,会把各种各样的物品分类放好,此时便用到了收纳盒。收纳盒很好,他来者不拒,而收纳盒在装下物品之前,他也不知道里面装的内容是什么。正如List集合一致,它可以装下各种各样的数据类型,如String、Int、Object等。但想要知道集合中的元素是什么类型的,只能在装入元素之后才能得知。当在对一个空的集合使用add方法加入元素时,加入的元素是一个不确定的类型,此时就可以使用泛型。
2023-09-10 18:53:42
242
1
原创 Kotlin的函数式编程
如果匿名内部类只包含一个方法,那么语法会显得冗余。Lambda表达式设计出来就是为了解决这一问题,同样也是匿名函数。
2023-09-07 18:01:53
233
1
原创 Kotlin编程基础
subString()与subSequence()的区别在于,后者的返回值是CharSequence。使用三对引号(""" """)把所有字符括起来,可以保证原有字符的输出,即使有转义符号也不会被转义。\":双引号字符,Kotlin中,双引号表示字符串的开始与结束,直接写会报错。\':单引号字符,Kotlin中,单引号表示字符的开始与结束,直接写会报错。\t:制表符,将光标定位到下一个制表符的位置,类似文档中的Tab。\r:回车符,将光标定位到当前行的开头,不会跳到下一行。\n:换行符,跳到下一行开头。
2023-09-03 00:21:38
91
原创 andriod studios找不到output-metadata.json的解决方法
原因是最后一行的output-metadata.json在应用的build文件夹中找不到,这与应用的build.grandle文件中output-metadata.json的生成路径有关系。当如上图中注释掉build.grandle红框中的生成选项后,不再报该错误。在Android studios上安装运行时,无法直接安装,会报如上错误。
2023-06-20 09:54:49
1395
2
原创 配置前台服务报错:Permission Denial: startForeground & Bad notification for startForeground
在配置前台服务时,笔者遇到了两个报错,首先遇到的错误如下:Permission Denial: startForeground这是由于配置前台服务时,首先需要给予权限,在AndroidManifest中插入如下语句:<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />此时便分配了前台服务的权限,但直接运行有可能会出现第二个错误:Bad notification for startFo
2022-03-10 16:26:30
2235
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人