android
文章平均质量分 58
师范大学生
登峰造极境
展开
-
Broadcast入门1
从示例中可以看出,如果仅实现动态注册——监听广播,需要实现的部分如下:1.实现一个receiver,继承自BroadcastReceiver。重写onReceive方法,在里面实现监听到具体广播后的逻辑。2.实例化并注册该receiver,在注册时通过在intentFilter里设置action来指定监听的广播类型。3.在销毁活动时取消注册。否则会导致内存泄漏。该示例展示的是动态注册方法。安卓系统的一些系统级别的广播是要求动态注册的。但是也可以发现动态注册存在的一个问题,就是在程序启动之后才会生效。原创 2024-04-21 20:36:08 · 254 阅读 · 1 评论 -
Activity入门2——生命周期与任务栈
OnCreate:创建一个活动。OnDestroy:销毁一个活动。假设某个用户在一个活动里输入了一些信息,用户由于某些原因退出了该活动,返回时希望能够还原之前输入的信息,不然重新输入就太麻烦了。从以上代码可以看到:onDestroy:在活动销毁时,将用户输入的内容通过持久化的方式存起来。onCreate:在活动创建时,如果已经有持久化存储的内容,就把该内容取出并赋值到输入栏里。原创 2024-04-05 15:48:43 · 271 阅读 · 0 评论 -
Activity入门1——activity跳转
显式跳转的特点是,intent中包含要跳转过去的组件的.class。通常用于app内部的跳转。原创 2024-03-31 22:55:35 · 246 阅读 · 0 评论 -
RecyclerView入门
什么是recyclerView?我们常见的可以滑动的,分块的视图样式就可以认为是recyclerView。比如:在开发前还需要了解一些概念:ViewHolder:可以看到recyclerView是以分块的视图形式组织的。分块无论其形状,里面的内容如何,每一个分快称之为ViewHolder。上图中一个title+subtitle的条形分块就是一个ViewHolder。原创 2024-03-17 19:57:13 · 820 阅读 · 0 评论 -
java 低耦合观察者模式
在之前的文章中,虽然被观察者并不依赖于观察者,但是被观察者知道观察者的存在,这就出现了一定程度的耦合关系。我们通常希望一个观察者模式是这样的:1.观察者依赖于被观察者,被观察者不依赖于观察者。2.被观察者最好不知道观察者的存在,既能独立工作,又能减少与观察者的耦合关系。原创 2022-09-14 17:52:19 · 512 阅读 · 0 评论 -
Android HandlerThread例程
在多线程通信中我们通常使用handler进行异步通信。在线程中使用handler稍微有一些麻烦,比如说创建handler的时候必须保证当前线程中有Looper对象,否则会创建失败。安卓的主线程自带一个Looper,但是我们手动创建的子线程是不会自带Looper对象的,因此我们如果想要在子线程接收信息,也就是在子线程创建handler,就必须在子线程先创建Looper对象,有点麻烦。于是HandlerThread可以解决这个问题,里面内部自带了Looper对象。原创 2022-09-14 10:57:44 · 617 阅读 · 0 评论 -
Java的synchronized关键字用法
可以自定义一个任意实例对象,实现对代码块的同步。原创 2022-09-13 16:12:14 · 230 阅读 · 0 评论 -
JNI学习5.jstring的处理
代码中GetStringUTFChars能够得到一个修改后的utf8类型的字符串,将该字符串赋值给需要返回的字符串即可。此外需要ReleaseStringUTFChars对临时创建的char指针进行内存释放。原创 2022-09-02 15:01:02 · 2112 阅读 · 0 评论 -
Android多线程实现
Android基础的多线程实现方式主要有两种,一种是创建一种线程类并直接继承Thread类,重写其run函数实现线程功能,第二种是实现Runnable接口,通过线程辅助类实现线程功能。原创 2022-08-17 20:17:35 · 1499 阅读 · 0 评论 -
Android Handler例程(sendMessage与post)
在安卓中,只有主线程才能进行UI操作。说明子线程内无法实现对UI的修改,因此安卓必然支持一种线程通信机制,使得子线程可以发消息让主线程改一下UI,该方案就是handler。安卓中子线程之间也需要通信,通信方案也是handler。......原创 2022-08-15 16:58:31 · 1993 阅读 · 1 评论 -
观察者模式
观察者模式常用于一对多的监听情景,并且被监听者可以实现监听者的回调,也就是说被监听者能够触发监听者的动作,该动作就是回调。观察者模式的特点:1.被观察者不知道具体的观察者是谁,只知道自己被观察了,并且在合适的时机进行广播,让感兴趣的观察者知道发生了什么事情。2.观察者依赖于被观察者,被观察者不依赖于观察者,是单向关系,耦合程度不高。没有被观察者,观察者无法工作;没有观察者,被观察者该干啥干啥,因为被观察者本来就不清楚谁观察他,发广播是被观察的个人行为。......原创 2022-08-10 21:38:43 · 1765 阅读 · 0 评论 -
EventBus3 笔记
eventbus是安卓开发中常用的消息传递工具,能够有效对发送方与接收方解耦合。原创 2022-08-10 11:55:04 · 328 阅读 · 0 评论 -
JNI学习4.动态注册
静态注册较为简单,只需要在Java程序中声明jni函数,随后在cpp程序中实现此jni函数即可。静态注册的实现方式为:当java程序第一次使用某个jni函数时,会进行搜索,根据包名-类名-函数名进行搜索,随后与对应的jni函数建立连接,随后便可以调用。由于虚拟机自动实现了注册匹配,所以在实际编写中比较省力,名字匹配了就可以直接用。但是静态注册有一些缺点:1.函数名称需要匹配,不能自定义。2.每个jni函数第一次被调用时都需要搜索,增加了额外开销。如果工程中的jni函数较多,在搜索方面可能会花费较多时间。..原创 2022-08-04 17:51:58 · 854 阅读 · 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 · 1224 阅读 · 0 评论 -
JNI学习2.jni函数调用java方法
这里需要注意com.example.hello_cmake.TestCallBack是类的完整路径,但是识别的时候是以Linux标准进行的,因此里面的.要替换成/来表示路径。jni函数本身也算是java类的一个成员方法,在调用的时候,需要先实例化TestCallBack类,再进行调用。在java中,类的成员方法必须以实例调用的形式调用,因此必须实例化一个对象,才能调用成员函数add。调用方法的函数参数中,前两个分别为实例与方法的ID,后面的参数则是调用的java方法的参数。第三步:实例化一个对象。.....原创 2022-08-03 20:22:15 · 2174 阅读 · 0 评论 -
查看java函数签名
在jni函数开发中需要知道被调用的java函数的函数签名,在android studio内即可完成操作。首先对工程build一下,得到build文件夹。原创 2022-08-03 17:16:59 · 885 阅读 · 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 · 413 阅读 · 1 评论 -
Android cannot resolve constructor intent解决
intent的原型是Intent(Contextcontext,Classclass),从当前的context跳转到class,问题在于当前的context到底是谁的context。由于监听器是一种内部类,所以在监听器中的this指代的并不是当前的活动,而是当前的监听器。上面的语句我写在了一个button的监听器中,这也是造成错误的原因。该语句的作用为从当前的活动跳转到活动MainActivity2。因此需要将context参数进行正确的定位。...原创 2022-07-31 21:00:38 · 501 阅读 · 3 评论