自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 资源 (1)
  • 收藏
  • 关注

转载 docker 服务器镜像仓库

Docker私有仓库Docker私有仓库是用于存储和管理Docker镜像的私有存储库。Docker默认会有一个公共的仓库Docker Hub,而与Docker Hub不同,私有仓库是受限访问的,只有授权用户才能够上传、下载和管理其中的镜像。这种私有仓库可以部署在本地云环境中,用于组织内部开发、测试和生产环境中的容器镜像管理。保证数据安全性。Harbor是一个开源的企业级Docker Registry服务,它提供了一个安全、可信赖的仓库来存储和管理Docker镜像。Harbor翻译为中文名称为"庇护;居住;

2025-03-13 18:29:23 80

原创 Binder的非正常消亡时的重置方法

创建IBinder.DeathRecipient接口,重写其中的binderDied(),当Binder死亡时候,回调该方法。/*连接Service端,获取mIBookManger*///初始化mIBookManger。/*连接Service端,获取mIBookManger*///解除绑定当前接口。Service端:BookService.java。//绑定接口,等待回调。...(连接之前的代码)当然解除绑定,之前还需要绑定接口。

2025-02-07 10:21:48 864

转载 AIDL源码解析in、out和inout

官网介绍AIDL的时候上有这么一段话大概意思是非默认类型的参数都需要添加指向标签in,out或inout。根据自己的需求去添加,因为实现是有代价的。

2024-12-24 15:47:54 91

原创 framework-android启动

第一步:手机开机后,引导芯片启动,引导芯片开始从固化在。主要加载一些硬件设备驱动,初始化进程管理等操作。第二步:硬件等参数初始化完成后,进入到。系统中用户空间的第一个进程,进程号为。而来启动其他相关进程以及其他操作。里的预设代码执行,加载引导程序到到。进程是所有进程的鼻祖,第一个启。),用于初始化进程管理、内管。设置其他系统属性并开启属性服务。层加载完毕后,硬件设备驱动与。等用户守护进程,并且会启动。来启动其他进程,进入无限循。,初始化硬件参数等功能;初始化进程管理等操作会启动。进程被赋予了很多重要工作,

2024-09-04 16:08:23 814

原创 android-aidl5

1. oneway可以修饰AIDL文件里的方法,oneway修饰的方法在用户请求相应功能时不需要等待响 应可直接调用返回,非阻塞效果,该关键字可以用来声明接口或者声明方法,如果接口声明中用到了oneway关键字,则该接口声明的所有方法都采用oneway方式。2. in 由cilent端流向server端,server端可以收到此对象的所有数据,收到之后会重新创建一个新的对象将数据填充进去,因为cilent端和server端是两个不同的对象,所以server端对数据的修改不会影响到client端的对象;

2024-06-28 16:35:59 429

原创 android-aidl4

在使用service中进行AIDL交互时候,如果服务端或者客户端意外停止,会抛出异常android.os.DeadObjectException , 这时候我们就需要双向监听服务端和客户端的异常停止,并重新绑定服务。

2024-06-21 17:07:53 889

转载 android-装饰者模式-context

装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

2024-06-18 15:52:40 210

转载 android-aidl3

AIDL默认支持一些数据类型,在使用这些数据类型的时候是不需要导包的,但是除了这些类型之外的数据类型,在使用之前必须导包,就算目标文件与当前正在编写的 .aidl 文件在同一个包下——在 Java 中,这种情况是不需要导包的。其实所谓的“服务端”和”客户端”在Binder通讯中是相对的,因为我们在客户端项目中拷贝了aidl文件,所以我们客户端项目其实不仅可以发送消息,充当”Client”,同时我们也可以收到服务端项目推送的消息,从而升级为”Server”,这个功能依赖于AIDL的Stub和Proxy……

2024-06-13 14:51:38 59

原创 android-线程池3

LogUtil.d("serverSocket=" + serverSocket + ",inetSocketAddress=" + inetSocketAddress+"开始等待客户端接入");Executors.defaultThreadFactory(), (r, executor) -> LogUtil.e(r.toString() + "执行了拒绝策略"));* 核心线程数:可以根据Runtime.getRuntime().availableProcessors()* 子线程委托的执行方法。

2024-06-06 14:37:15 590

原创 android-线程池1

本节我们主要对前五个参数中的corePoolSize,maximumPoolSize及workQueue是如何配合使用做出说明(keepAliveTime,unit主要对空闲线程的存活时间做的定义,见名知意,不再做出说明),以此来引出线程池的一些特性。从实验结果上可以看出,当执行任务1的线程(thread-1)执行完成之后,任务2并没有去复用thread-1而是新建线程(thread-2)去执行任务。当任务5加入时,队列达到上限,池内运行的线程数达到最大,故执行默认的拒绝策略,抛异常。

2024-06-06 14:34:47 744

转载 android-线程池2

为什么只有一个坑位呢,因为这个公厕是收费的,收费的大爷上年纪了,只能管理一个坑位,多了就管不过来了(线程同步问题)。(1)CachedThreadPool只有非核心线程,最大线程数非常大,所有线程都活动时,会为新任务创建新线程,否则利用空闲线程(60s空闲时间,过了就会被回收,所以线程池中有0个线程的可能)处理任务。(1)从配置参数来看,FixThreadPool只有核心线程,并且数量固定的,也不会被回收,所有线程都活动时,因为队列没有限制大小,新任务会等待执行。因此不需要处理线程同步的问题。

2024-06-06 13:39:25 54

原创 android-jni2

/找到对应的java文件。下面才是navite的方法,上面的是NativeAction的普通方法,上面的代码是在调用c++在调用java的方法。LOGE("开始=======================:%d", "begin");LogUtil.e("调用输出======,printAction");

2024-06-04 17:33:10 503

原创 android-JNI

可以看到MainActivity里首先加载了我们在CMakeLists里定义的动态库 ,然后声明了一个native的方法stringFromJNI(),这个方法在onCreate里被调用。不同的应用程序如果调用相同的库,那么在内存中只需要有一份该共享库的实例,避免了空间浪费问题。同时也解决了静态库对程序的更新的依赖,用户只需更新动态库即可。2.动态加载库: 当需要的时候再使用 dlopen 等通过代码或者命令的方式来加载 (在程序启动之后)①静态库对函数库的链接是在编译期完成的。(因此动态库也称为共享库)

2024-06-04 15:22:57 832

转载 Android之Application和Activity的Context区别

attachBaseContext()方法其实是由系统来调用的,它会把ContextImpl对象作为参数传递到attachBaseContext()方法当中,从而赋值给mBase对象,之后ContextWrapper中的所有方法其实都是通过这种委托的机制交由ContextImpl去具体实现的,所以说ContextImpl是上下文功能的实现类是非常准确的。Activity.this的context是属于当前Activity的,当前Activity摧毁的时候,它就摧毁。

2024-06-03 14:36:31 211

转载 AndroidManifest.xml中android:name

在Android中,有一个名为Application的类,我们可以在Activity中使用getApplication()这个类,方法来获得,它是代表我们的应用程序的类,使用它可以获得当前应用的主题,资源文件中的内容等,这个类更灵活的一个特性就是可以被我们继承,来添加我们自己的全局属性。android:name属性——是用来设置所有activity属于哪个application的,是用来app启动时来关联一个application的,默认关联的是android.app.Application。

2024-06-03 14:35:51 293

原创 android-handler-3

这里丢的是主线程的looper,参考handler-2的HandlerThread,把mHandlerThread的loop丢进去,就是在子线程中运行了。当然刚才提到的作用只是对应于主线程中的 sMainLooper 了,其实各种 Looper 都可以往 Handler 的构造方法这里扔,从而使得 handleMessage 运行在你想要的线程中,进而实现线程间通信。在此注意构造函数中第一个参数是 Looper 就可以了,那么也就是说,我们可以传递一个已有的 Looper 来创建 Handler。

2024-05-30 17:27:39 256

原创 android-handlerThread

多次点击按钮mBtnHandlerThread,然后点击mBtnInnerClass,mTxtShowTest显示"点击了mBtnInnerClass",10s后mTxtShowTest显示"来自于mHandlerInHandlerThread的请求更新",之后再点击mBtnInnerClass,mTxtShowTest显示"点击了mBtnInnerClass",10s后又会mTxtShowTest显示"来自于mHandlerInHandlerThread的请求更新",即可证明前面注意中说明的问题。

2024-05-30 14:18:03 1292

转载 android-handler-2

next()方法开启一个死循环,首先调用nativePollOnce()方法,来判断是否需要进行阻塞操作,当没有消息需要处理、或者还没到消息的处理时间时,则进行休眠操作。Looper中的loop()方法开启死循环,会不断的从消息队列中取出消息(通过调用MessageQueue.next()方法取出消息),然后调用目标Handler(即发送该消息的Handler)的 dispatchMessage()方法分发消息,目标Handler收到消息,调用 handleMessage()方法,接收消息,处理消息。

2024-05-30 13:31:09 53

原创 android-handler

做 Android 开发肯定离不开跟 Handler 打交道,它通常被我们用来做主线程与子线程之间的通信工具,而 Handler 作为 Android 中消息机制的重要一员也确实给我们的开发带来了极大的便利。可以说只要有异步线程与主线程通信的地方就一定会有 Handler。Handler 简单易用的背后藏着工程师大量的智慧,要努力向他们学习。希望看完本文能加深你对 Handler 的理解,对接下来学习有所帮助。作者:kevenZheng。

2024-05-29 15:37:59 1025 1

原创 android-mvp模式

从图中就可以看出,最明显的差别就是view层和model层不再相互可知,完全的解耦,取而代之的presenter层充当了桥梁的作用,用于操作view层发出的事件传递到presenter层中,presenter层去操作model层,并且将数据返回给view层,整个过程中view层和model层完全没有联系。可以看到model层只负责数据的获取和解析成对应的数model,这个和MVC的Model层一致,成为一个独立的单元,其他层不需要关心它是如何实现,达到解耦的目的。//获得Model层返回的列表数据。

2024-05-27 13:26:04 740

转载 android-databing

写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个关于Flutter的学习思路及方向,从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。所以有了dataBinding我们极大的减轻了Activity所要做的操作,Activity可以更专注于对数据与逻辑的处理,而UI的获取与数据和UI的绑定都交给了布局文件。然后打印日志查看运行效果。

2024-05-27 10:09:38 112

转载 android进阶-java反射

一个类中有属性,方法,构造器等,比如说 有一个Person类,一个Order类,一个Book类,这些都是不同的类,现在需要一个类,用来描述类,这就是 Class,它应该有类名,属性,方法,构造器等。②先通过Class对象获取指定的Constructor对象,再调用Constructor对象的newInstance()方法来创建实例。Method getDeclaredMethod(String name, Class[] params) 使用特写的参数类型,获得类声明的命名的方法。

2024-05-21 16:45:16 83

原创 android设计模式-代理模式

分为静态代理和动态代理,静态代理就是自己写相应的代理类和实现,动态代理就是用JDK自带的机制,jdk会在运行中动态的生成代理类;在例子中具体买房等方法理解成子类中介怎么去做,可以有很多的中介。而真正的代理类更像是如链家那个房子。去指派哪些人,分配哪些人去完成工作。其实用的依旧是java中最常见的继承、多态的关系。

2024-05-20 11:18:14 406

原创 android设计模式-工厂模式

(1)一个类不知道它所需要的对象的类:在工厂方法模式中,客户端不需要知道具体产品类的类名,只需要知道所对应的工厂即可,具体的产品对象由具体工厂类创建;//---------------------之前没变的代码区域end---------------------////----------------工厂类和工厂接口换个角度设计(彻底改头换脸)----------------////---------------------之前没变的代码区域---------------------//

2024-05-16 20:33:12 1167

原创 android设计模式-原型设计(深、浅拷贝)

原形模式是一种创建型模式,原形模式多用于创建复杂对象或者构造耗时的实例。它的作用主要是"克隆",用户从原形对象复制出一个内部属性一样的对象。因为类的初始化需要耗费很多的资源,原形拷贝则可以更高效。最后,原形模式其实就是对象的拷贝,这跟C++/Object-C中的clone类似,容易出问题的也就在深浅拷贝上,使用原形模式可以解决复杂对象构建资源消耗的问题。也可以用来只读保护。注意其clone时不会走构造函数。作者:Yink_Liu。

2024-05-15 17:23:42 718

原创 android设计模式-观察者模式

也就是平时的按键监控其实不仅是接口的调用和回调,也是个观察者模式//平常里的按钮事件监听例子//注册观察者//观察者实现@Override//这里可以知道要观察的对象的一举一动...});//拆分后buttonA ---->要观察的对象//要观察谁谁谁setOnClickListener() ---->观察者new OnClickListener() ---->观察者的实现//在实现里可以知道要观察的对象的一举一动。

2024-05-15 14:56:11 994

原创 android设计模式-builder模式

/返回的Builder对象,通过第一个返回的Build对象,能够去调用setX2.通过第二个返回的Builder去调用build(),build方法返回A的对象,并在启动也传入了builder对象。属性多的时候,使用set,get第二种方式,是解决了上面的问题,但是会让调用set方法的对象重复了20次或更多,同时也属于不连续的情况,该类的其他属性在被创建之后被修改,给程序带来了一些不安全性,像下面”商品.setX1("修改后的属性");商品.setX1("");商品.setX2("");

2024-05-15 10:23:35 392

原创 android设计模式-单例模式

防止编译器优化:编译器在优化代码时会尝试将变量的访问操作优化为更高效的方式,例如将变量的值缓存在寄存器中。然而,对于某些特殊的变量,如多线程环境下的共享变量、中断处理中的标志位、硬件寄存器等,这种优化可能会导致意外的行为。多用于整个程序只需要有一个实例,通常很消耗资源的类,比如线程池,缓存,网络请求,IO操作,访问数据库等。处理多线程共享变量:在多线程编程中,当一个变量被多个线程共享并且可能被一个线程修改时,需要使用 volatile 关键字来确保线程之间的可见性。确保一个类只有一个实例,并且自行实例化。

2024-05-14 15:42:21 513

原创 android进阶-回调

requestPermissions方法用于请求权限,而onRequestPermissionsResult回调方法用于接收权限请求的结果,并据此执行相应的操作。只是少了一个doWork,个人怀疑是在其他的地方,处理复杂的触摸、点击等操作,然后处理完后发生点击,回调回Onclick方法中,然后就能处理其他事情了。网络请求回调:在进行网络请求时(如使用 Retrofit、OkHttp),回调用于处理请求成功或失败后的操作。当接收到广播时,onReceive方法会被回调,允许开发者在此方法中执行相应的操作。

2024-05-13 17:24:50 1026

原创 android进阶-AIDL

在实现AIDL的过程中服务端APP和客户端APP中要包含结构完全相同的AIDL接口文件,包括AIDL接口所在的包名及包路径要完全一样,否则就会报错,这是因为客户端需要反序列化服务端中所有和AIDL相关的类,如果类的完整路径不一致就无法反序列化成功。Android SDK 工具会自动生成基于该 .aidl 文件的 IBinder 接口,具体的业务对象实现这个接口,这个具体的业务对象也是 IBinder 对象,当绑定服务的时候会根据实际情况返回具体的通信对象(本地还是代理)"还书成功" : "还书失败");

2024-05-10 18:45:39 1006

原创 android进阶-Binder

ServiceManager进程:ServiceManager的作用是将字符形式的Binder名字转化成Client中对该Binder的引用,使得Client能够通过Binder名字获得对Server中Binder实体的引用。Binder驱动:驱动负责进程之间Binder通信的建立,Binder在进程之间的传递,Binder引用计数管理,数据包在进程之间的传递和交互等一系列底层支持。原文链接:https://blog.youkuaiyun.com/ly0724ok/article/details/117566381/

2024-05-10 14:32:50 599

原创 android基础-服务

oncreate是服务第一次启动调用,onStartCommand是服务每次启动的时候调用,也就是说服务只要启动后就不会调用oncreate方法了。可以在myservice中的任何位置调用stopself方法让服务停止下来。同样使用intent来传递服务。

2024-05-08 18:41:21 432

原创 android基础-多线程

创建子线程,子线程不允许直接更新UI,试想下如果多个线程去更新UI,则会造成资源错乱,如果枷锁就会使得代码冗余复杂。doInBackground是在子线程中。另一种异步多线程方法。

2024-05-08 17:25:10 321

原创 android基础-通知

notificationcompat.builder后面可以跟很多的方法,不同方法不同效果,比如加一个音频.setSound(uri)使用PendingIntent来实现点击通知跳转到另一个活动。基于第一行android。

2024-05-08 16:51:53 109

原创 SQL手册

转:http://blog.youkuaiyun.com/web_gus/article/details/132122Select用途:从指定表中取出指定的列的数据语法:SELECT column_name(s) FROM table_name解释:从数据库中选取资料列,并允许从一或多个资料表中,选取一或多个资料列或资料行。SELECT

2024-05-08 15:56:09 1152 1

原创 android基础-ContentProvider

权限:普通权限可以直接在xml中直接申请即可(之前安卓安装过程中一列的权限需求表),如果是危险权限,主要就是和隐私相关的。则需要动态的去申请(就是android之前的那种弹框)。相比于前面的持久化存储,持久化存储只能是在自身程序去使用各类数据,从它的存储路径就能够看出/data/xxxpackages/filexxx/xxx,ContentProvider主要用于不同的应用程序之间实现数据共享的功能。

2024-04-26 17:36:45 143

原创 android基础-数据持久化

save方法是从DataSupport来,更多查询删除新增百度下,这个开源库很好用。2.SharedPreferences,使用键值对的方式存储数据。Book类是写的各种getid()name 等方法。3.sqlite数据库存储,使用的时候直接百度下。1.数据存储在文件中,使用流的方式。还可以使用LitePal开源库。基于第一行代码-安卓。

2024-04-26 17:14:28 193 1

原创 android基础-广播

基于第一行代码-安卓。

2024-04-26 14:01:08 120

原创 android基础-fragment(碎片)

2024-04-26 10:16:14 145 1

原创 android基础-UI

基于第一行代码-安卓。

2024-04-25 15:34:41 141 1

platform-tools_adb.zip

adb 版本为1.0.4.0 linux ,直接使用,放在linux的环境变量中就可以了

2019-12-09

空空如也

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

TA关注的人

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