
android
文章平均质量分 58
师范大学生
登峰造极境
展开
-
Fragment学习笔记
静态加载直接注册在布局的xml文件里。需要注意,要指定frament的类型<android:name>和id<android:id>。原创 2024-08-18 23:23:34 · 706 阅读 · 0 评论 -
Service入门笔记
Service 是 Android 系统中的一种组件,用于在后台执行长时间运行的操作或处理异步任务。Service 可以在不依赖于用户界面的情况下运行,并且可以在应用程序被关闭后继续运行。原创 2024-08-11 11:25:43 · 419 阅读 · 0 评论 -
android轮播图入门2——触摸停止与指示器
监听轮播图切换轮播视图事件,每次组件切换都遍历一次圆点,将对应当前数据位置的圆点改成选中态。触摸停播的设计思路是:监听实现轮播图的触摸事件,如果用户正在触摸就停止自动轮播。轮播图初始化时,创建数据个数相等的小圆点,默认为未选中状态。原创 2024-07-06 19:21:24 · 449 阅读 · 0 评论 -
android轮播图入门1——简单无限自动轮播图
自动定时轮播可以通过Handler的延时方式实现,首先要明确,在用户不可见的情况要停止自动轮播,因此要在上屏/移出屏幕时做处理。另外还有一个问题,就是我们希望轮播图一开始可以往左滑动,而不是只能向右滑动,这样可以给用户一种无限循环的感觉。改写getCount方法,返回的数值就是轮播图的组件数量,我们设置为int的最大值,视作无限多。因此在视图初始化时,应该手动给轮播图当前的组件设定一个足够大的值,使得用户可以不断地向左滑。需要注意,设定的值需要是数据数组长度的倍数,这样才能定位到第一个轮播组件。原创 2024-06-29 20:38:26 · 708 阅读 · 0 评论 -
Installed Build Tools revision xxx is corrupted. Remove and install again 解决
1.在buildTools文件下找到对应的sdk版本,首先将版本对应目录下的d8.bat改名为dx.bat。2.在lib文件下将d8.jar改名为dx.jar。3.重新编译工程即可。原创 2024-06-29 18:28:19 · 2555 阅读 · 1 评论 -
FileProvider与apk下载
我们这次把某个apk放在storage下的一个目录下,用一个FileProvider生成uri后,启动一个活动去安装。首先用apk所在的path生成一个uri。这里需要注意,external_path是storage/emulated/0这个目录,这个目录直接写入文件似乎是不可以的(创建文件夹可以),因此我们把apk存放在storage/emulated/0的子目录下,确保不发生权限问题。我们这里自定义了一个FileProvider,单纯继承自安卓提供的基类。原创 2024-05-26 17:55:51 · 3671 阅读 · 0 评论 -
Broadcast入门1
从示例中可以看出,如果仅实现动态注册——监听广播,需要实现的部分如下:1.实现一个receiver,继承自BroadcastReceiver。重写onReceive方法,在里面实现监听到具体广播后的逻辑。2.实例化并注册该receiver,在注册时通过在intentFilter里设置action来指定监听的广播类型。3.在销毁活动时取消注册。否则会导致内存泄漏。该示例展示的是动态注册方法。安卓系统的一些系统级别的广播是要求动态注册的。但是也可以发现动态注册存在的一个问题,就是在程序启动之后才会生效。原创 2024-04-21 20:36:08 · 326 阅读 · 1 评论 -
Activity入门2——生命周期与任务栈
OnCreate:创建一个活动。OnDestroy:销毁一个活动。假设某个用户在一个活动里输入了一些信息,用户由于某些原因退出了该活动,返回时希望能够还原之前输入的信息,不然重新输入就太麻烦了。从以上代码可以看到:onDestroy:在活动销毁时,将用户输入的内容通过持久化的方式存起来。onCreate:在活动创建时,如果已经有持久化存储的内容,就把该内容取出并赋值到输入栏里。原创 2024-04-05 15:48:43 · 343 阅读 · 0 评论 -
Activity入门1——activity跳转
显式跳转的特点是,intent中包含要跳转过去的组件的.class。通常用于app内部的跳转。原创 2024-03-31 22:55:35 · 317 阅读 · 0 评论 -
RecyclerView入门
什么是recyclerView?我们常见的可以滑动的,分块的视图样式就可以认为是recyclerView。比如:在开发前还需要了解一些概念:ViewHolder:可以看到recyclerView是以分块的视图形式组织的。分块无论其形状,里面的内容如何,每一个分快称之为ViewHolder。上图中一个title+subtitle的条形分块就是一个ViewHolder。原创 2024-03-17 19:57:13 · 893 阅读 · 0 评论 -
java 低耦合观察者模式
在之前的文章中,虽然被观察者并不依赖于观察者,但是被观察者知道观察者的存在,这就出现了一定程度的耦合关系。我们通常希望一个观察者模式是这样的:1.观察者依赖于被观察者,被观察者不依赖于观察者。2.被观察者最好不知道观察者的存在,既能独立工作,又能减少与观察者的耦合关系。原创 2022-09-14 17:52:19 · 566 阅读 · 0 评论 -
Android HandlerThread例程
在多线程通信中我们通常使用handler进行异步通信。在线程中使用handler稍微有一些麻烦,比如说创建handler的时候必须保证当前线程中有Looper对象,否则会创建失败。安卓的主线程自带一个Looper,但是我们手动创建的子线程是不会自带Looper对象的,因此我们如果想要在子线程接收信息,也就是在子线程创建handler,就必须在子线程先创建Looper对象,有点麻烦。于是HandlerThread可以解决这个问题,里面内部自带了Looper对象。原创 2022-09-14 10:57:44 · 679 阅读 · 0 评论 -
Java的synchronized关键字用法
可以自定义一个任意实例对象,实现对代码块的同步。原创 2022-09-13 16:12:14 · 282 阅读 · 0 评论 -
JNI学习5.jstring的处理
代码中GetStringUTFChars能够得到一个修改后的utf8类型的字符串,将该字符串赋值给需要返回的字符串即可。此外需要ReleaseStringUTFChars对临时创建的char指针进行内存释放。原创 2022-09-02 15:01:02 · 2560 阅读 · 0 评论 -
Android多线程实现
Android基础的多线程实现方式主要有两种,一种是创建一种线程类并直接继承Thread类,重写其run函数实现线程功能,第二种是实现Runnable接口,通过线程辅助类实现线程功能。原创 2022-08-17 20:17:35 · 1596 阅读 · 0 评论 -
Android Handler例程(sendMessage与post)
在安卓中,只有主线程才能进行UI操作。说明子线程内无法实现对UI的修改,因此安卓必然支持一种线程通信机制,使得子线程可以发消息让主线程改一下UI,该方案就是handler。安卓中子线程之间也需要通信,通信方案也是handler。......原创 2022-08-15 16:58:31 · 2304 阅读 · 1 评论 -
观察者模式
观察者模式常用于一对多的监听情景,并且被监听者可以实现监听者的回调,也就是说被监听者能够触发监听者的动作,该动作就是回调。观察者模式的特点:1.被观察者不知道具体的观察者是谁,只知道自己被观察了,并且在合适的时机进行广播,让感兴趣的观察者知道发生了什么事情。2.观察者依赖于被观察者,被观察者不依赖于观察者,是单向关系,耦合程度不高。没有被观察者,观察者无法工作;没有观察者,被观察者该干啥干啥,因为被观察者本来就不清楚谁观察他,发广播是被观察的个人行为。......原创 2022-08-10 21:38:43 · 1914 阅读 · 0 评论 -
EventBus3 笔记
eventbus是安卓开发中常用的消息传递工具,能够有效对发送方与接收方解耦合。原创 2022-08-10 11:55:04 · 482 阅读 · 0 评论 -
JNI学习4.动态注册
静态注册较为简单,只需要在Java程序中声明jni函数,随后在cpp程序中实现此jni函数即可。静态注册的实现方式为:当java程序第一次使用某个jni函数时,会进行搜索,根据包名-类名-函数名进行搜索,随后与对应的jni函数建立连接,随后便可以调用。由于虚拟机自动实现了注册匹配,所以在实际编写中比较省力,名字匹配了就可以直接用。但是静态注册有一些缺点:1.函数名称需要匹配,不能自定义。2.每个jni函数第一次被调用时都需要搜索,增加了额外开销。如果工程中的jni函数较多,在搜索方面可能会花费较多时间。..原创 2022-08-04 17:51:58 · 944 阅读 · 0 评论 -
JNI学习3.cpp代码在android studio打印日志
从代码中可知,“CPPLOG”就是日志的tag,可以自定义修改。代码运行时在logcat中搜索CPPLOG就可以找到相关的日志。为了方便调试,通常在Java代码中打印日志。但是在jni开发中,如果c++函数也需要打印日志进行调试,就必须进行额外设置。LOGD,LOGI,LOGE是三种类型的日志,和java日志原型是一一对应的。4.在Java程序中调用jni函数,日志输出结果。3.在jni函数中进行调用。......原创 2022-08-04 11:20:05 · 1345 阅读 · 0 评论 -
JNI学习2.jni函数调用java方法
这里需要注意com.example.hello_cmake.TestCallBack是类的完整路径,但是识别的时候是以Linux标准进行的,因此里面的.要替换成/来表示路径。jni函数本身也算是java类的一个成员方法,在调用的时候,需要先实例化TestCallBack类,再进行调用。在java中,类的成员方法必须以实例调用的形式调用,因此必须实例化一个对象,才能调用成员函数add。调用方法的函数参数中,前两个分别为实例与方法的ID,后面的参数则是调用的java方法的参数。第三步:实例化一个对象。.....原创 2022-08-03 20:22:15 · 2354 阅读 · 0 评论 -
查看java函数签名
在jni函数开发中需要知道被调用的java函数的函数签名,在android studio内即可完成操作。首先对工程build一下,得到build文件夹。原创 2022-08-03 17:16:59 · 1104 阅读 · 0 评论 -
JNI学习1.环境配置与简单函数实现
本文使用的android studio版本是2021年的版本,自android studio之后对JNI的配置就比较简单,因为LLDB已经默认集成到了android studio中。打开SDK manager,在SDK tools里面将NDK与CMake一起下载即可,可以点击右下角的show package details,展示具体的版本进行下载安装。......原创 2022-08-03 15:40:14 · 489 阅读 · 1 评论 -
Android cannot resolve constructor intent解决
intent的原型是Intent(Contextcontext,Classclass),从当前的context跳转到class,问题在于当前的context到底是谁的context。由于监听器是一种内部类,所以在监听器中的this指代的并不是当前的活动,而是当前的监听器。上面的语句我写在了一个button的监听器中,这也是造成错误的原因。该语句的作用为从当前的活动跳转到活动MainActivity2。因此需要将context参数进行正确的定位。...原创 2022-07-31 21:00:38 · 652 阅读 · 3 评论