自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 android透明状态栏主题

【代码】android透明状态栏主题。

2024-07-22 12:01:26 15

原创 viewpager在setCurrentItem时取消切换效果快速进行页面切换

此时应该使用mViewPager.setCurrentItem(page,false);把smoothScorll设置为false,官方解释是设置为false时快速切换到该页面。此方法进行跳转时会有滑动切换的效果,从其他应用切换到指定页面甚至会形成闪烁效果,所以我们要取消页面切换的效果,点击按键拉起应用后直接出现指定的页面,提高了用户的体验效果。一般我们是用的mViewPager.setCurrentItem(page)进行页面切换。

2024-06-27 18:22:39 108

原创 android切换白天黑夜布局消失以及viewpager问题

则更适合于页面数量较多且对内存使用有较高要求的场景。在选择使用哪种Adapter时,应根据具体的应用需求和预期的性能影响来决定。切换白天黑夜会调用onConfigurationChanged,然后需要重新刷新布局才能生效。再往上发现是切换fragment的viewpager导致的fragment不重走什么周期。原因是因为fragment没有重走生命周期去刷新布局。适合于页面切换频繁且数据需要持久保存的场景,而。问题是切换之后fragment布局消失了。

2024-06-19 11:41:44 422

原创 android解决ViewPager嵌套导致的滑动冲突问题

问题描述,需求是子viewpager滑动到极限之后使父viewpager进行滑动,目前的问题是子viewpager滑动到极限之后父viewpager无法滑动。解决方法是在父类中进行拦截,当子view是viewpager时进行判断处理不让子view滑动。

2024-05-27 10:45:46 184

原创 android修改状态栏颜色

View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR(深色图标)View.SYSTEM_UI_FLAG_VISIBLE(白色图标)-- 状态栏浅色模式(即图标深色) -->

2024-05-27 10:39:39 97

转载 Android 源码编译mk里导入androidx下的包/导入Recyclerview

需要在 Android.mk 中添加如下。

2024-04-03 17:40:51 122

原创 设计一个旋转thumb

【代码】设计一个旋转thumb。

2024-03-22 15:24:58 154

原创 android关于静态广播

注册静态广播之后无法接收到发送的广播。原因是没有指定具体的接收器路径。问题在创建好之后没有收到广播。

2024-03-16 09:55:40 229

原创 关于Binder

app创建时会走ActivityThread的main函数然后调用Attach方法将自己的binder传给ams管理,ams就会像ServicerManager一样管理这些binder,只不过这些binder只在ams管理进程时内部使用不会公布给第三方。系统空间分为用户空间和内核空间,用户空间可以通过系统调用(IOCTL)访问内核空间,内核空间需要管理系统调用(Socket,Binder,内存共享。都是在内核空间定义的一种管理规则,这些规则帮助用户空间完成一次数据的交换)为什么要在进程启动时创建?

2023-07-20 16:22:20 260

原创 车载系统启动流程以及如何去配置一个随系统启动的程序,并实现跨系统通信

两个系统中都需要有中间件,中间件技术用到fdbus,先要建立连接,之后服务端暴露一些接口给客户端,客户端通过接口与服务端进行通信。通过在init.rc中的配置会在系统启动时把xiangxueservice拉起来。这里在xiangxueservice应用程序的group中配置了inet用户组。应用安装后pms会给分配一个uid可在proc目录下找到对应uid的文件。不同系统如何通信(车载中android(AAOS)如何与qnx通信?给应用声明一个权限后用户组发生变化(以internet为例)

2023-07-18 15:58:25 325

转载 Android intent 传值不更新的原因和解决办法

当 Activity 的启动模式是 singleTask 或者 singleInstance 的时候。如果使用了 intent 传值,则可能出现 intent 的值无法更新的问题。也就是说每次 intent 接收到的值都是第一次接到的值。因为 intent 没有被更新。想要更新需要做两件事情。2. 接收方 Activity,加上一个函数,调用方法 setIntent。1. 发送方 Activity,加上一句话。

2023-07-03 14:20:35 414

原创 设计模式学习:工厂方法模式

在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。学习了一周的设计模式感觉自己并没有充分掌握它们的使用,u所以打算先把之前学习的几个常用模式熟练掌握之后再学习其他的模式,so,设计模式的学习暂时先到此~(ps:后续还需学习观察者模式,原型模式,建造者模式!(1)使用工厂方法来创建用户所需的产品,用户只要关心所需产品对应的工厂,无需关心创建的细节。

2023-06-21 16:02:22 76

原创 设计模式学习:抽象工厂模式

在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,只需要改变具体的工厂即可使用不同的产品配置。(抽象工厂模式将具体产品的创建延迟到具体工厂的子类中,这样将对象的创建封装起来,可以减少客户端与具体产品类之间的依赖,从而使系统。这是因为抽象工厂接口中已经确定了可以被创建的产品集合,如果需要添加新产品,此时就必须去修改抽象工厂的接口,这样就涉及到抽象工厂类的以及所有子类的改变,这就违背了"开闭原则")他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;

2023-06-20 18:23:20 72

原创 设计模式学习:代理模式

他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。简单的说就是,我们在访问实际对象时,是通过代理对象来访问的,代理模式就是在访问实际对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途。上文过于全面,so,仅记录学习。

2023-06-19 15:01:47 50

原创 设计模式学习:装饰模式

装饰模式是指在不改变原有对象的基础之上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能),属于结构型模式。装饰器模式的核心是功能扩展,使用装饰器模式可以透明且动态地扩展类的功能。装饰器是继承的有力补充,比继承灵活,不改变原有对象的情况下动态地给一个对象扩展功能,即插即用。从代码层面来看,使用装饰器模式会出现更多的代码,更多的类,增加程序复杂性。通过使用不同装饰类以及这些装饰类的排列组合,可以实现不同效果。动态装饰时,多层装饰时会更复杂。装饰器完全遵守开闭原则。

2023-06-16 17:36:40 50

原创 设计模式学习:策略模式

策略模式:策略模式是一种行为型模式,它将对象和行为分开,将行为定义为一个行为接口和具体行为的实现。策略模式最大的特点是行为的变化,行为之间可以相互替换。每个if判断都可以理解为就是一个策略。本模式使得算法可独立于使用它的用户而变化优点:提供了对“开放封闭原则”的完美支持提供了管理相关的算法族的办法提供了可以替换继承关系的办法使用策略模式可以避免使用多重条件转移语句@OverrideSystem.out.println("策略A");@Override。

2023-06-15 16:23:44 50

原创 设计模式学习:简单工厂模式

简单工厂专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。加减乘除继承自运算类,要增加其他运算只需要再新创建一个类就好了,不会影响到其他的运算类,并且我们需要什么运算只需将操作符提供给工厂,由工厂创建对象,不需要直接创建,nice~工厂类中有必要的判断逻辑 , 可以决定根据当前的参数创建对应的产品实例 , 客户端可以免除直接创建产品对象的责任;提供专门的工厂类用于创建对象 , 客户端无需知道所创建的产品类的类名 , 只需要知道对应产品类的参数即可创建对象实例;

2023-06-14 15:42:09 51

原创 SearchManager使用以及源码解析

getSearchables(int userId, boolean forceUpdate)内部会通过userId判断当前用户是否获取过searchables,如果没有则创建新的searchables对象并调用updateSearchableList()进行数据的初始化操作之后会存入SparseArray mSearchables中。内部会去解析activity中注册的meta-data对象,找到对应的searchable.xml并解析里面的信息。

2023-06-13 11:12:25 326

原创 recyclerView不显示滑动条的几种原因

2.包含recyclerview的布局中设置了背景,导致背景盖住了滑动条,可以把背景拉出来单独设置一个view。1.宽度设置成了match_parent, 可以改成具体的dp大小。3.父布局小了,调大一点。

2023-06-02 17:10:57 932

原创 RecyclerView数据不更新,以及无法改变宽高

调用notifyDataSetChanged出现ListView不刷新问题根源在于mList指向了其他内存空间,而不是修改了原指向内存空间内容。错误做法是直接把list对象替换:(list = mlist)2.某个item被初始化之后宽高被固定。再贴一个adapter模板。上面的做法就会出问题。

2023-05-31 17:08:35 318

原创 android13配置GlobalSearch全局搜索

searchable.xml配置(GlobalSearchAppTest/app/src/main/res/xml/searchable.xml)

2023-05-29 17:42:16 333

原创 CarService工作流程

这时就完成了应用层拿到想要的xxxManager对象,xxxManager拿到了xxxService对象,之后想要做具体的事情应用层只要调用xxManager提供的API,xxxManager再调用xxxService的api就行了。通过调用mService(也就是CarService,在Android13中改为ICarimpl)的getCarService方法拿到想要的binder对象(例如mCarInputService)中的服务,名称上存在对应关系,所以很好理解。

2023-05-19 18:12:47 880

原创 Android源码下载与编译

emulator -writable-system -wipe-data //remount +清除用户数据。emulator -writable-system //可以remount。adb shell reboot wapedata //清除数据重启。emulator -verbose 正常启动。

2023-05-09 13:43:49 197

原创 Android13的一些新变化

新项目要求在android13的基础上开发,基于此调查13的一些变化。

2023-05-08 15:03:55 1054

原创 Android消息机制 Handler,MessageQueue,Looper

用来存储不同线程中的数据,不同线程访问同一个ThreadLocal的get方法,ThreadLocal内部会从各自的线程中取出一个数组,然后再从数组中根据当前ThreadLocal的索引去查找对应的value值。数据结构:名字是消息队列其实是一个单链表的数据结构存储消息队列(在插入和删除上比较有优势)方法:quit(直接退出)和quitSafaly(messagequeue中的已有消息处理完才安全退出)为什么不加上锁机制:会让UI的访问逻辑变得复杂,其次会降低UI的访问效率因为锁机制会阻塞某些线程的执行。

2023-05-07 22:55:27 118

原创 Handler如何实现跨线程通信?Handler会发生内存泄漏?为什么?怎么办?

当我们执行了HandlerActivity的界面时,被延迟的消息会在被处理之前存在于主线程消息队列中5分钟,而这个消息中又包含了Handler的引用(message中持有了handler的引用),而我们创建的Handler又是一个匿名内部类的实例,其持有外部HandlerActivity的引用,这将导致了HandlerActivity无法回收,进行导致HandlerActivity持有的很多资源都无法回收,从而就造成了传说中的内存泄露问题!另外关于同样也需要将Runnable设置为静态的成员属性。

2023-04-27 11:15:03 181

原创 关于解决滑动与长按事件冲突的方案

在一个页面中有长按和滑动的事件,当按住屏幕下滑时会触发长按事件影响用户体验:

2023-04-27 10:35:07 398

原创 拼音匹配汉字并将汉字高亮

匹配工具类主要涉及字符串拼接,拆分(匹配方法可以优化使用KMP模式匹配算法,有空优化。先将汉字转拼音,用到pingyin4j工具类。

2023-04-24 10:13:54 175

原创 Windowmanager&layoutparam

设置位置,宽高,属性type的内容。

2023-04-23 23:17:58 174

原创 Framwork学习:View绘制流程

之后设置标志位mprivateFlags判断是否刷新,然后调用父布局(viewgroup)的invalidatechild,不能每个view单独刷新,gpu会乱套,所以丢给它的parent统一管理。当ActivityB在ActivityA下面,刷新ActivityB的页面时,能否刷新成功?因为设置了跳过(skipinvalidate图2),页面不可见时UI是不会刷新的。webview是硬件加速丢给GPU为了快速刷新。view刷新有两种:硬件个软件。

2023-04-23 22:56:53 56

原创 framwork学习:应用启动流程&wms

为了拿到ams,wms等服务,因为ams,wms在systemserver中,一旦ams wms创建后就会把binder自己的binder存到sm,app创建后也会把自己的binder给到ams由ams进行管理(也就是存到systemServer)(如图3)手机启动时会启动init进程,init会启动sm进程(属于app的守护进程,由sm帮我们拿到ams或wms服务的binder),再通过binder调用ams的代码,再由ams发送socket请求让zygote fork一个进程。app为什么能一直运行?

2023-04-23 22:39:46 203

原创 快速切换fragment,不会产生重叠的方法

3.切换时设置layout隐藏(layout.setVisibility(VIEW.GONE))并发送延时handler,延迟一定时间后再显示layout(layout.setVisibility(VIEW.VISIBLE))1.加载第一个fragment时用loadRootFragment(),之后用replaceFragment。2.在fragment中加入不透明的背景,切换时可以遮住后面的fragment。

2023-04-21 10:07:52 213

原创 关于Android音视频,实现录屏并输出MP4文件

一个视频从录制到生成MP4文件的过程和需要用到的工具类及作用

2022-11-07 17:26:11 1679

原创 关于动画的一些知识

安卓动画View动画(平移,缩放,旋转,透明度),帧动画(也属于View动画表现形式略有不同而已)和属性动画。

2022-07-05 23:52:48 510

转载 java.lang.NullPointerException: Can‘t toast on a thread that has not called Looper.prepare()

Can't toast on a thread

2022-06-12 22:53:27 3296 2

原创 解决androidstudio无法连接虚拟机问题

在终端执行关闭-开启adb之后成功连接adb kill-server adb start-server

2021-08-03 11:21:08 1692

原创 关于项目导入bouncycastle报错问题

关于项目导入bouncycastle报错问题开始使用的是网页教程,去官网下载了jar包,之后在本地引入jar包,在线下可以正常使用,但是部署到线上就会报错之后选择了用新的方式,使用maven导入jar包<dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.5

2021-04-26 17:22:30 3640 1

旋转thumbDemo

旋转thumbDemo

2024-03-22

android13配置GlobalSearch全局搜索

android13配置GlobalSearch全局搜索

2023-05-29

空空如也

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

TA关注的人

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