1.Android广播接收器简介 在Android中,BroadcastReceiver(广播接收器)是一种组件,用于监听系统广播或应用程序内自定义广播,并在广播发生时接收并处理这些广播。广播接收器可以用于实现组件之间的通信,无论是在同一个应用程序内还是在不同应用程序之间。 广播接收器有两个主要部分: 注册广播接收器:在AndroidManifest.xml文件中声明广播接收器,或者通过代码动态注册广播接收器。这样系统或其他应用程序发送匹配的广播时,广播接收器就会被激活。 处理广播:广播接收器在接收到广播时,会调用其onReceive(Contextcontext,Intentintent)...

概述 我们先看下IconCache的初始化过程,接着看下IconCache核心数据结构、算法,最后介绍与之关联的几个类。 Launcher.java publicclassLauncherextendsStatefulActivity<LauncherState>implements...{ ... publicstaticfinalStringTAG="Launcher"; privateLauncherModelmModel; ... @Override protectedvoidonCreate(BundlesavedInstanceState){ ... Launche...

一、需求 我司存在内存为1GRAM的设备,属于低内存设备,经常会出现内存很紧张的场景,也容易因此导致一系列七七八八的边际问题,故有必要了解Android系统的内存相关知识: 了解内存的分配、回收方式 了解OOM、LMK的相关机制 了解Android系统内存相关调试方式 了解Android系统的性能优化方案 二、环境 JDK1.8 Android10 三、JVM JVM是JavaVirtualMachine(Java虚拟机)的缩写,JVM是一个虚构出来的计算机,有着自己完善的硬件架构,如处理器、堆栈等。 3.1编译&执行过程 Java语言使用Java虚拟机屏蔽了与具体平...

一、trycatch trycatch是否一定有效呢?未必,来看一下: 1、withContext importkotlinx.coroutines. funmain()=runBlocking{ launch{ println("launchstart") try{ withContext(Dispatchers.IO){ //可能抛出异常 } }catch(ex:Exception){ println("withContextcaught:${ex.message}") } println("launchend") } } withContext是一个挂起函数,它会暂停当前协程的执...

对安装的apk进行校验,除了系统应用市场中下载的,其它渠道的apk都进行安装拦截,并且弹框提示。 首先需要把验证的证书保存在数据库本地,后面需要用到 然后注册系统广播,用于接收apk安装时的监听,这个广播由系统发出 新装时的 action‘android.intent.action.PACKAGE_ADDED 替换时的action android.intent.action.PACKAGE_REMOVED android.intent.action.PACKAGE_ADDED android.intent.action.PACKAGE_REPLACED 删除时的action android...

  mkIZDEUN7jdf   2023年11月02日   28   0   0 androidAppAppTextTextandroid

有时候,需要文字在左边,右边有个箭头,我个人之前会有两种做法: 使用线性布局来实现 或者使用约束布局,一个左对齐,一个右对齐 这几天突然想到是否可以使用TextView的设置图标的方式实现,研究发现确实可以实现我的需求,也是记录下 文字和图标左右显示 效果: 代码: <TextView android:id="@+id/tvRate" style="@style/textStyle18" android:padding="20dp" android:layout_width="match_parent" android:layout_height="wrap_content" a...

DataBinding允许您编写表达式去处理从View分发的事件。例如onClick()方法。事件属性名称由监听器方法的名称确定,但有少数例外。例如,View.OnClickListener有一个方法onClick(),因此此事件绑定的属性为android:onClick。有一些专门的点击事件处理者(注:它们也接受View.OnClickListener参数)需要使用android:onClick以外的属性来避免冲突。您可以使用以下属性来避免这些类型的冲突: Class Listenersetter Attribute SearchView setOnSearchClick...

导入 DataBinding库提供了导入、变量和include等功能。导入可以方便在引用布局文件中引用类;变量允许您描述可在绑定表达式中使用的属性;Includes允许您在整个应用程序中重用复杂的布局。 Imports Imports允许您轻松地在布局文件中的引用类,就像在代码中一样。data元素内部可以使用零个或多个import元素。以下代码示例将View类导入布局文件: <data> <importtype="android.view.View"/> </data> 通过导入View类,可以从绑定表达式中引用它。以下示例显示了如何引用View类的VI...

Kotlin有三种结构化跳转表达式: return:默认从最直接包围它的函数或者匿名函数返回。 break:终止最直接包围它的循环。 continue:继续下一次最直接包围它的循环。 for循环中使用break、continue for(iin1..5){ if(i3)break//1这里分别使用breakcontinuereturn println("i:$i") } println("循环外继续执行") 1处分别使用break、continue、return替换,执行结果如下: //break i:1 i:2 循环外继续执行 //continue i:1 i:2 i:4 i:5...

一、介绍 适配器模式主要是为了解决系统中两个接口实现某个或某类功能但又不兼容的问题,比如国内居民用电电压是220V,手机充电输入电压是5V,在给手机充电时需要将220V电压转换为5V,这个转换装置就可以理解为适配器,软件编程中有时也需要用到这种思想,解决这类问题就需要用到适配器模式。适配器模式细分为类适配器模式、对象适配器模式和接口适配器模式三种。 二、示例 1、类适配器模式 类适配器模式是指适配器类通过继承源对象类,实现目标接口的方式,在适配器类中实现目标接口定义的方法,在实现方法中调用源对象类方法并作相关转换,从而输出想要的结果。 1.1、UML类图 类适配器模式 在这个例子中,Volt...

ActivitysetContentView流程解析 参考图解: 自主生码.jpg 1.当MainActivity直接继承自Activity时 此时会执行Activity类的setContentView方法: publicvoidsetContentView(@LayoutResintlayoutResID){ getWindow().setContentView(layoutResID); initWindowDecorActionBar(); } 主要的逻辑在getWindow().setContentView(layoutResID)中,下面将以实现类PhoneWindow的set...

  mkIZDEUN7jdf   2023年11月02日   32   0   0 android赋值赋值android

GreenDao介绍 GreenDao是一个开源的AndroidORM嵌入式关系数据库,通过将Java对象映射到数据库表(称为ORM,“对象/关系映射”),使用一个简单的面向对象的API来存储、更新、删除和查询Java对象。 GreenDao特点 ●最佳性能(可能是Android中最快的ORM),基准测试也是开源的; ●易于使用的功能强大的api,涵盖关系和连接; ●最小的内存消耗; ●小型库大小(<100KB),以保持较低的构建时间,并避免65k方法限制; ●数据库加密:greenDAO支持SQLCipher来保证用户数据的安全; ●强大而活跃的社区交流支持。 GreenDao使用 依...

一、实验背景和目标 我想做一个Android平台的跨进程数据通道,通过这个通道支持若干App之间的数据传输。我想到了一些传输方案,但是缺乏在方案中做出选型的评价依据。本实验会基于若干方案实现数据传输通道,在模拟的业务场景中进行实验,从功能性指标和非功能性指标对各方案做出评价。 i.数据通道的功能性指标 数据由A进程产生,从A进程传输到B进程。 数据是在一段时间内陆续产生的,数据的长度事先不确定。 每产生一段数据就要立即从A进程发送到B进程,不能等到数据产生完了再一次性传输。 B进程需要及时接收数据,接收数据不能有太大延迟,更不能等到A完成了数据发送才一次性接收。换句话说,B进程要能及时感知A...

安装fluttersdk之前的准备动作,先把xcode和谷歌浏览器下载了 1、下载sdk: https://docs.flutter.dev/release/archive?tab=macos就是下载这个 2.下载后,解压文件,在向往文件夹下/users/用户名,输入这个内容,会看到下面这个图片 在这里创建一个文件夹名为development,这个名称随意,但是不要中文,不要有特殊字符 把之前解压的文件放在这个文件夹里 3.打开终端,输入cddevelopment,然后输入ls就能查看到这个flutter文件夹了 4.接着输入vi/.bash_profile回车后按i键,输入一下内容...

  mkIZDEUN7jdf   2023年11月02日   41   0   0 androidflutterbashbashflutterandroid

jetpack库理解SavedStateHandle 作用 和ViewModel协作,用于从Activity销毁重建中恢复ViewModel的相关状态数据,我们知道当Activity被安卓系统销毁和重建的时候会调用onSaveInstanceState和onRestoreInstanceState方法,这个方法对于ViewModel来说是无法感知的,SavedStateHandle填补了这一空白,使得ViewModel可以通过此来保存一些状态数据 描述 SavedStateHandle是一个key-value映射,用于通过set()和get()方法向已保存的状态中检索和写入数据 如何使用? ...

mutableStateListOf返回一个可感知状态变化的MutableList 通常的State只能用来值改变的场景,对于List数据,List引用不变,往内部添加数据这个场景是无法感知到状态变化的,除非我们将List拷贝一份再重新赋值,如下代码 vala=mutableStateOf(mutableListOf(1,2,3))//a声明为这样 a.value=a.value.toMutableList().apply{add(4}}//a可以感知到状态变化 这样每次赋值就面临拷贝,不是很好,因此这里我们推荐使用mutableStateListOf,构建一个可以感知内部数据变化的Li...

flow是如何工作的 stateflow是建立在flow的基础上的,要理解stateflow,首先需要对flow有一定的了解,其实flow的原理很简单,不过是建立在了协程的基础上,假设没有协程,实际上flow就是用一个回调(FlowCollector)来进行工作的,加上了协程之后,由于协程支持中断和恢复,让flow可以匹配发送端和接受端的速度,毕竟如果不匹配的话就可以直接中断嘛, 用伪代码来表示flow的流程 flow{ emit(something)//上游 }.collect{ print(it)//下游 } //flow函数块的签名如下 flow(suspendblock:FlowC...

最近在研究monkey测试,发现monkey测试的代码都是JAVA编写的,通过编译生成jar包,而我们在执行测试时直接执行/system/bin/monkey这个二进制程序的,那么它是如何能调起java程序的呢? 先来看看monkey二进程程序的生成. development\cmds\monkey\Android.mk LOCAL_PATH:=$(callmy-dir) include$(CLEAR_VARS) LOCAL_SRC_FILES:=$(callall-subdir-java-files) LOCAL_MODULE:=monkeylib LOCAL_MODULE_STEM:=...

AndroidViewBinding是一种用于替代传统的findViewById和findViewById的视图绑定方法。它允许你以类型安全的方式访问应用布局中的视图元素,而无需手动查找它们。ViewBinding的实现原理如下: 布局文件解析:在编译期间,AndroidGradle插件会扫描项目中的布局文件(XML文件),并为每个布局文件生成一个对应的ViewBinding类。这个类的名称与布局文件的名称相关联,通常以驼峰命名法,例如,如果你的布局文件名为activity_main.xml,则生成的ViewBinding类名为ActivityMainBinding。 生成绑定类:为每个布局...

前言 在Android中,经常会遇到线程间通信的场景,下面就说说Android中最重要的异步消息机制Handler 异步消息机制Handler Handler是Android中最重要的异步消息机制,总共由四部分组成:Handler,Message,MessageQueue,Looper 1、主线程创建Handler对象(如果在子线程创建,必须保证调用了Looper.prepare()),并重写handleMessage()方法。 2、子线程创建Message对象,通过第一步创建的Handler发送消息,handler.sendMessage(message),handler将消息发送到Mess...

关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~