Android广播
文章目录
- 1.收发应用广播
- 1.标准广播
- 2.有序广播
- 3.广播的静态注册
- 2.监听系统广播
- 1.接受分钟到达广播
- 2.接受网络变更广播
- 3.定时管理器AlarmManager
- 3.捕捉屏幕的变更事件
- 1.竖屏和横屏切换
- 2.回到桌面与切换到任务列表
1.收发应用广播
1.标准广播
广播的收发过程分为三个步骤:
- 发送标准广播
- 定义广播接收器
- 开关广播接收器
public class BroadStandardActivity extends AppCompatActivity implements View.OnClickListener {private StandardReceiver standardReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_broad_standard);findViewById(R.id.btn_send_standard).setOnClickListener(this);}@Overridepublic void onClick(View view) {Intent intent = new Intent("com.zzzjian.demo7.standard");sendBroadcast(intent);}@Overrideprotected void onStart() {super.onStart();standardReceiver = new StandardReceiver();// 创建意图过滤器 只处理 com.zzzjian.demo7.action.standard 这个动作IntentFilter filter = new IntentFilter(StandardReceiver.STANDARD_ACTION);// 注册接收器 注册之后才能正常接受广播registerReceiver(standardReceiver, filter);}@Overrideprotected void onStop() {super.onStop();// 注销接收器 注销之后就不再接受广播unregisterReceiver(standardReceiver);}
}
public class StandardReceiver extends BroadcastReceiver {private static final String TAG = "StandardReceiver";public static final String STANDARD_ACTION = "com.zzzjian.demo7.standard";/*** 一旦收到标准广播,马上触发接收器的onReceive方法* @param context* @param intent*/@Overridepublic void onReceive(Context context, Intent intent) {if(intent != null && intent.getAction().equals(STANDARD_ACTION)){Log.d(TAG, "收到一个标准广播");}}
}
2.有序广播
- 一个广播存在多个接收器,这些接收器需要排队收听广播,这意味着该广播是条有序广播。
- 先收到广播的接收器,既可以让其他接收器继续收听广播,也可以中断广播不让其他接收器收听。
public class BroadOrderActivity extends AppCompatActivity implements View.OnClickListener {public static final String ORDER_ACTION = "com.zzzjian.demo7.order";private OrderAReceiver orderAReceiver;private OrderBReceiver orderBReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_broad_order);findViewById(R.id.btn_send_order).setOnClickListener(this);}@Overridepublic void onClick(View v) {Intent intent = new Intent(ORDER_ACTION);sendOrderedBroadcast(intent,null);}@Overrideprotected void onStart() {super.onStart();// 多个接收器处理有序广播的顺序规则// 1. 先处理优先级最高的接收器// 2. 优先级相同的接收器,先注册先处理orderAReceiver = new OrderAReceiver();IntentFilter filterA = new IntentFilter(ORDER_ACTION);filterA.setPriority(8);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {registerReceiver(orderAReceiver, filterA, Context.RECEIVER_EXPORTED);}orderBReceiver = new OrderBReceiver();IntentFilter filterB = new IntentFilter(ORDER_ACTION);filterB.setPriority(10);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {registerReceiver(orderBReceiver, filterB, Context.RECEIVER_EXPORTED);}}@Overrideprotected void onStop() {super.onStop();unregisterReceiver(orderAReceiver);unregisterReceiver(orderBReceiver);}
}
public class OrderAReceiver extends BroadcastReceiver {private static final String TAG = "OrderReceiver";@Overridepublic void onReceive(Context context, Intent intent) {if(intent != null && intent.getAction().equals(BroadOrderActivity.ORDER_ACTION)){Log.d(TAG, "收到一个有序广播A");}}
}
public class OrderBReceiver extends BroadcastReceiver {private static final String TAG = "OrderReceiver";@Overridepublic void onReceive(Context context, Intent intent) {if(intent != null && intent.getAction().equals(BroadOrderActivity.ORDER_ACTION)){Log.d(TAG, "收到一个有序广播B");// 中断广播abortBroadcast();}}
}
3.广播的静态注册
public class BroadStaticActivity extends AppCompatActivity implements View.OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_broad_static);findViewById(R.id.btn_send_shock).setOnClickListener(this);}@Overridepublic void onClick(View v) {// 8.0之后必须指定完整类名String fullName = "com.zzzjian.demo7.receiver.ShockReceiver";Intent intent = new Intent(ShockReceiver.SHOCK_ACTION);// 创建一个ComponentName对象,指定当前上下文和接收器全名ComponentName componentName = new ComponentName(this, fullName);intent.setComponent(componentName);sendBroadcast(intent);}
}
public class ShockReceiver extends BroadcastReceiver {public static final String SHOCK_ACTION = "com.zzzjian.demo7.shock";@Overridepublic void onReceive(Context context, Intent intent) {if(intent != null && intent.getAction().equals(SHOCK_ACTION)){Log.d("ShockReceiver", "震动");// 从系统服务获取震动管理器Vibrator vb = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);// 震动 500msvb.vibrate(500);}}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"><uses-permission android:name="android.permission.VIBRATE"/><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.MyApplication"><receiverandroid:name=".receiver.ShockReceiver"android:enabled="true"android:exported="true"><intent-filter><action android:name="com.zzzjian.demo7.shock" /></intent-filter></receiver><activityandroid:name=".BroadStaticActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>
2.监听系统广播
1.接受分钟到达广播
- Intent.ACTION_TIME_TICK
public class SystemMinteActivity extends AppCompatActivity {private TimeReceiver timeReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_system_minte);}@Overrideprotected void onStart() {super.onStart();timeReceiver = new TimeReceiver();IntentFilter filter = new IntentFilter(Intent.ACTION_TIME_TICK);registerReceiver(timeReceiver,filter);}@Overrideprotected void onStop() {super.onStop();unregisterReceiver(timeReceiver);}
}
public class TimeReceiver extends BroadcastReceiver {private static final String TAG = "TimeReceiver";@Overridepublic void onReceive(Context context, Intent intent) {if(intent != null){Log.d(TAG,"收到一个分钟到达的广播");}}
}
2.接受网络变更广播
- android.net.conn.CONNECTIVITY_CHANGE
getType:获取网络类型
| 网络类型 | 说明 |
|---|---|
| TYPE_WIFI | 无线热点WIFI |
| TYPE_MOBILE | 数据连接 |
| TYPE_WIMAX | WiMAX |
| TYPE_ETHERNET | 以太网 |
| TYPE_BLUETOOTH | 蓝牙 |
| TYPE_VPN | 虚拟专用网络VPN |
getTypeName:获取网络类型名称
getSubtype:获取网络的子类型。如果为数据连接时,子类型为2G/3G/4G等细分。
3.定时管理器AlarmManager
Android提供了专门的定时管理器AlarmManager,它利用系统闹钟定时发送广播,常见方法有:
- set:设置一次性定时器。
- setAndAllowWhileIdle:设置一次性定时器,即使设备处于空闲状态,也会保证执行定时器。
- setRepeating:设置重复定时器,但系统不保证按时发送广播。
- cancel:取消延迟意图的定时器。
public class AlarmActivity extends AppCompatActivity implements View.OnClickListener {private AlarmReceiver alarmReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_alarm);findViewById(R.id.btn_alarm).setOnClickListener(this);}@Overridepublic void onClick(View v) {alarmReceiver.sendAlarm();}protected void onStart() {// 调用父类的onStart方法super.onStart();// 创建AlarmReceiver实例,并传入当前应用的上下文// 这里假设AlarmReceiver是一个自定义的BroadcastReceiver子类alarmReceiver = new AlarmReceiver(getApplicationContext());// 创建IntentFilter对象,用于过滤接收到的广播// 指定接收的广播动作为AlarmReceiver.ALARM_ACTIONIntentFilter filter = new IntentFilter(AlarmReceiver.ALARM_ACTION);// 检查Android SDK版本是否大于等于Oreo(8.0)// Android Oreo引入了一些新的API和行为变化if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {// 注册BroadcastReceiver// 参数分别为:要注册的BroadcastReceiver实例、IntentFilter对象、注册标志// Context.RECEIVER_EXPORTED表示此BroadcastReceiver可以被其他应用访问registerReceiver(alarmReceiver, filter, Context.RECEIVER_EXPORTED);}}@Overrideprotected void onStop() {super.onStop();unregisterReceiver(alarmReceiver);}
}
public class AlarmReceiver extends BroadcastReceiver {public static final String ALARM_ACTION = "com.zzzjian.demo7.alarm";private final Context mContext;public AlarmReceiver(Context context){super();this.mContext = context;}@Overridepublic void onReceive(Context context, Intent intent) {if(intent != null && intent.getAction().equals(ALARM_ACTION)){Log.d("AlarmReceiver","收到一个闹钟的广播");}}public void sendAlarm(){// 创建一个Intent对象,指定动作类型为ALARM_ACTIONIntent intent = new Intent(ALARM_ACTION);// 创建一个PendingIntent对象,用于稍后触发Intent// 第二个参数为请求码,在此设置为0;第三个参数为Intent对象;第四个参数为标志位,设置为FLAG_IMMUTABLE表示PendingIntent不可变PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_IMMUTABLE);// 获取系统服务AlarmManager,用于管理定时任务AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);// 设置定时任务,当设备空闲时也可以唤醒设备执行任务// 参数分别为:AlarmManager设置类型、触发时间(从1970年1月1日00:00:00 GMT开始计算的毫秒数)、待执行的PendingIntent// 注释掉的代码为另一种设置方式,不支持设备空闲时唤醒// alarmManager.set(AlarmManager.RTC_WAKEUP, 1000, pendingIntent);if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, 1000, pendingIntent);}else{alarmManager.set(AlarmManager.RTC_WAKEUP, 1000, pendingIntent);}}}
3.捕捉屏幕的变更事件
1.竖屏和横屏切换
为了避免横竖屏切换时重新加载界面的情况,Android设计了一种配置变更机制,在指定的环境配置发生变更之时,无需重启活动页面,只需执行特定的变更行为。该机制分为两步:
- 修改AndroidManifest.xml,给activity节点增加android:configChange属性
- 修改活动页面的Java代码,重写活动的onCinfigurationChanged方法,补充对应的代码处理逻辑。
| onfigChanges属性的取值 | 说明 |
|---|---|
| orientation | 屏幕方向发生变化 |
| screenLayout | 屏幕的显示发生改变,例如在全屏和分屏之间切换 |
| screenSize | 屏幕大小发生改变,例如在竖屏和横屏之间切换 |
| keyboard | 键盘发生改变,例如使用了外部键盘 |
| keyboardHidden | 软键盘弹出或隐藏 |
| navigation | 导航方式发生改变,例如采用了轨迹球导航 |
| fontSize | 字体比例发生改变 |
| locale | 设备本地位置发生改变,例如切换了系统语言 |
| uiMode | 用户界面的模式发生改变,例如开启了夜间模式 |
<activityandroid:name=".ChangeDirectionActivity"android:exported="true"android:theme="@style/Theme.MyApplication"android:configChanges="orientation|screenLayout|screenSize"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>
public class ChangeDirectionActivity extends AppCompatActivity {private static final String TAG = "ChangeDirectionActivity";private TextView tv_monitor;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_change_direction);tv_monitor = findViewById(R.id.tv_monitor);Log.d(TAG, "onCreate");}@Overridepublic void onConfigurationChanged(@NonNull Configuration newConfig) {super.onConfigurationChanged(newConfig);switch (newConfig.orientation){case Configuration.ORIENTATION_PORTRAIT:tv_monitor.setText("竖屏");break;case Configuration.ORIENTATION_LANDSCAPE:tv_monitor.setText("横屏");break;default:break;}}
}
2.回到桌面与切换到任务列表
- 按下主页键会回到桌面,按下任务键会打开任务列表,这两个操作并未提供相应的按键处理方法,而是通过广播发出事件信息。
- 如果想知道是否回到桌面,以及是否打开任务列表,均需收听系统广播Intent.ACTION_CLOSE_SYSTEM_DIALOGS。
- 从收到广播意图中获取原因reason字段,该字段值为homekey时表示回到桌面,值为recentapps时表示打开任务列表。
public class ReturnDesktopActivity extends AppCompatActivity {private DesktopReceiver desktopReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_return_desktop);desktopReceiver = new DesktopReceiver();IntentFilter filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {registerReceiver(desktopReceiver,filter, Context.RECEIVER_EXPORTED);}}@Overrideprotected void onDestroy() {super.onDestroy();unregisterReceiver(desktopReceiver);}@Overridepublic void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {super.onPictureInPictureModeChanged(isInPictureInPictureMode);if(isInPictureInPictureMode){Log.d("ReturnDesktopActivity", "进入小窗模式");}else{Log.d("ReturnDesktopActivity", "退出小窗模式");}}private class DesktopReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {if(intent != null && intent.getAction().equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)){String reason = intent.getStringExtra("reason");if(!TextUtils.isEmpty(reason) && (reason.equals("home") || reason.equals("recentapps"))){if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && !isInPictureInPictureMode()){PictureInPictureParams.Builder builder = new PictureInPictureParams.Builder();Rational aspectRatio = new Rational(10, 5);builder.setAspectRatio(aspectRatio);enterPictureInPictureMode(builder.build());}}}}}
}
<activityandroid:name=".ReturnDesktopActivity"android:configChanges="orientation|screenLayout|screenSize"android:exported="true"android:screenOrientation="portrait"android:supportsPictureInPicture="true"android:theme="@style/Theme.MyApplication"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>
相关文章:
Android广播
文章目录 1.收发应用广播1.标准广播2.有序广播3.广播的静态注册 2.监听系统广播1.接受分钟到达广播2.接受网络变更广播3.定时管理器AlarmManager 3.捕捉屏幕的变更事件1.竖屏和横屏切换2.回到桌面与切换到任务列表 1.收发应用广播 1.标准广播 广播的收发过程分为三个步骤&…...
Chapter 2 - 3. Understanding Congestion in Fibre Channel Fabrics
B2B Credit Counters Figure 2-3 shows the following counters on an FC port: 图 2-3 显示了 FC 端口上的以下计数器: 1. Rx B2B credits: The number of receive buffers of an FC port. This value does not change while the port is up. FC 端口的接收缓冲区数量。该值…...
014 属性分组
文章目录 后端AttrGroupEntity.javaCategoryEntity.javaAttrGroupController.javaCategoryServiceImpl.java 前端attrgroup-add-or-update.vue https://element.eleme.cn/#/zh-CN/component/cascader 后端 AttrGroupEntity.java package com.xd.cubemall.product.entity;impo…...
ElasticSearch备考 -- Alias
一、题目 1) Create the alias hamlet that maps both hamlet-1 and hamlet-2 Verify that the documents grouped by hamlet are 8 2) Configure hamlet-3 to be the write index of the hamlet alias 二、思考 可以通过指定别名,来指向一个或多个索引,…...
使用AI编码,这些安全风险你真的了解吗?
前言 随着AI技术的飞速发展与普及,企业开发人员对AI编码助手工具如Copilot的依赖度日益增强,使用AI编码助手工具虽然能显著提升编程效率与质量,但同时也存在一系列的潜在风险。 许多开发人员可能未意识到,如果他们的现有代码库中…...
计算机网络实验一:组建对等网络
实验一 组建对等网络 实验要求: 1. 组建对等网络,会在命令行使用ipconfig,两网络能够相互ping通,尝试netstat 命令 2. 建立局域网共享文件夹 3. 安装packet tracer,模拟组建对等网并测试对等网 1、组建对等网络 连…...
R语言绘制折线图
折线图是实用的数据可视化工具,通过连接数据点的线段展示数据随时间或变量的变化趋势。在经济、科学、销售及天气预报等领域广泛应用,为决策和分析提供依据。它能清晰呈现经济数据动态、助力科学研究、反映企业销售情况、预告天气变化,以简洁…...
基于组合模型的公交交通客流预测研究
摘 要 本研究致力于解决公交客流预测问题,旨在通过融合多种机器学习模型的强大能力,提升预测准确性,为城市公交系统的优化运营和交通管理提供科学依据。研究首先回顾了公交客流预测领域的相关文献,分析了传统统计方法在处理大规…...
docker环境redis启动失败
现象: 查看日志错误为 Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check-aof --fix <filename> 经查询为aof文件损坏导致,修复aof即可 解决方法: 1.查看执行的docker命令&…...
Pandas库详细学习要点
Pandas库是一个基于Python的数据分析库,它提供了丰富的数据结构和数据分析工具,非常适合数据科学和数据分析领域的工作。以下是Pandas库详细学习的一些要点: 1. 数据结构 - Series:一维带标签数组,类似于NumPy中的一…...
光路科技TSN交换机:驱动自动驾驶技术革新,保障高精度实时数据传输
自动驾驶技术正快速演进,对实时数据处理能力的需求激增。光路科技推出的TSN(时间敏感网络)交换机,在比亚迪最新车型中的成功应用,显著推动了这一领域的技术进步。 自动驾驶技术面临的挑战 自动驾驶系统需整合来自雷达…...
【含开题报告+文档+PPT+源码】基于SpringBoot的社区家政服务预约系统设计与实现【包运行成功】
开题报告 社区家政服务是满足居民日常生活需求的重要组成部分,在现代社会中发挥着越来越重要的作用。随着城市化进程的不断加速,社区家政服务需求量呈现持续增长的趋势。然而,传统的家政服务模式存在一些问题,如预约流程繁琐、信…...
2024最新【Pycharm】史上最全PyCharm安装教程,图文教程(超详细)
1. PyCharm下载安装 完整安装包下载(包含Python和Pycharm专业版注册码):点击这里 1)访问官网 https://www.jetbrains.com/pycharm/download/#sectionwindows 下载「社区版 Community」 安装包。 2)下载完成后&#…...
llama3 implemented from scratch 笔记
github地址:https://github.com/naklecha/llama3-from-scratch?tabreadme-ov-file 分词器的实现 from pathlib import Path import tiktoken from tiktoken.load import load_tiktoken_bpe import torch import json import matplotlib.pyplot as plttokenizer_p…...
照片在线转成二维码展示,更方便分享图片的好办法
怎么能把照片生成二维码后,分享给其他人展示呢?现在很多人为了能够更方便的将自己的图片展现给其他人会使用生成二维码的方式,将图片存储到云空间,通过扫码调取图片查看内容。与其他方式相比,这样会更加的方便…...
『网络游戏』登陆协议制定客户端发送账号密码CMD【19】
修改服务器脚本:ServerSession 修改服务器脚本:GameMsg 修改客户端脚本:ClientSession.cs 修改客户端脚本:NetSvc.cs 修改客户端脚本:WindowRoot.cs 修改客户端脚本:SystemRoot.cs 修改客户端脚本ÿ…...
独享动态IP是什么?它有什么独特优势吗?
在网络世界中,IP地址扮演着连接互联网的关键角色。随着互联网的发展,不同类型的IP地址也应运而生,其中独享动态ip作为一种新型IP地址,备受关注。本文将围绕它的定义及其独特优势展开探讨,以帮助读者更好地理解和利用这…...
gaussdb hccdp认证模拟题(单选)
1.在GaussDB逻辑架构中,由以下选项中的哪一个组件来负责提供集群日常运维、配置管理的管理接口、工具?(1 分) A. CN B. DN C. GTM D. OM --D 2.在以下命令中,使用以下哪一个选项中的命令可以以自定义归档形式导出表t1的定义…...
【斯坦福CS144】Lab1
一、实验目的 1.实现一个流重组器——一个将字节流的小块 (称为子串或段 )按正确顺序组装成连续的字节流的模块; 2.深入理解 TCP 协议的工作方式。 二、实验内容 编写一个名为"StreamReassembler"的数据结构,它负责…...
药箱里的药及其常见药的作用
药箱里有常备药,经常买药,但是忘了自己有什么药。容易之间弄混,以此作为更新存储的媒介。 1、阿莫西林胶囊 处方药 是指需要由医师或者医疗人员开局处方才能购买的药物(常见的OTC是非处方药的意思)。 截止时间 2024 10/10 药品资料汇总&am…...
何时DCDC预降压+LDO二次线性稳压?
LDO 核心选型分界结论及优化要点核心选型分界结论以LDO输入输出压差ΔV为核心判断指标,结合输出功率、场景约束,通用选型规则如下:通用强制分界点:当ΔV≥2V,且输出功率≥100mW(对应你之前的5V转3V70mA工况…...
JIT热路径识别失效?手撕Python 3.14 _pyjitsymbol.c源码,定位3个未文档化的profile阈值陷阱(内附补丁POC)
第一章:JIT热路径识别失效?手撕Python 3.14 _pyjitsymbol.c源码,定位3个未文档化的profile阈值陷阱(内附补丁POC)Python 3.14 引入的 _pyjitsymbol JIT 框架在实际压测中频繁出现热路径“失焦”现象:高频率…...
Win11Debloat:让你的Windows系统重获新生的终极优化指南
Win11Debloat:让你的Windows系统重获新生的终极优化指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …...
P1095 守望者的逃离【洛谷算法习题】
P1095 守望者的逃离 网页链接 P1095 守望者的逃离 题目背景 NOIP2007 普及组 T3 题目描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变。 守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上。…...
简单介绍C语言中的字符串函数
1.首先给出字符分类函数这几个就简单过一下,不做重点说明。这两个为字符转换函数,顾名思义,没什么好介绍的;接下来简单介绍几个字符串函数:strlen.strcpy.strcat.strstr.strncpy.strncat.memcpy.memmove;strlen:求字符…...
MongoDB(70)如何使用副本集进行备份?
使用副本集进行备份是一个常见的MongoDB备份策略,因为副本集提供了数据冗余和高可用性。通过从副本集中读取数据,可以在不影响主节点的情况下进行备份。以下是详细的步骤和示例代码,展示如何使用 MongoDB 副本集进行备份。方法一:…...
Qwen3.5-2B入门指南:如何将本地7860服务映射为公网可访问API接口
Qwen3.5-2B入门指南:如何将本地7860服务映射为公网可访问API接口 1. 引言 Qwen3.5-2B是阿里云推出的轻量化多模态基础模型,属于Qwen3.5系列的小参数版本(20亿参数)。这个模型主打低功耗、低门槛部署,特别适合在端侧和…...
当知识有了‘关系网‘:LightRAG如何让大模型‘秒懂‘你的文档?
想象一下,你有一座藏书万卷的图书馆,但你找书的方式只有一种——记住每本书某个页面的关键词,然后靠"猜"来定位。 这,就是传统RAG系统的尴尬处境。 今天要介绍的这个开源项目LightRAG,被顶会EMNLP 2025接收…...
3PEAK思瑞浦 TPT1051V-SO1R SOP8 CAN收发器
特性 符合IS011898标准支持CAN FD和最高达5 Mbps的数据速率典型环路延迟:110纳秒5V电源供应,3.0V~5.5VI0接口接收器共模输入电压:士30V总线故障保护:42VCAN网络最多支持110个节点结温范围从-40C到150C闩锁性能超过500mA总线引脚ESD保护:-8kV人体模型 -1.5kV充电设备…...
基于Comsol相控阵技术的实用钢纵波超声波成像模型:单层缺陷TFM成像与压力声学仿真
comsol 相控阵 超声成像 此模型为压力声学仿真超声波,实用钢纵波速度6000 密度7.8e-9 单层缺陷TFM成像相控阵超声检测这玩意儿在工业NDT圈子里算是老熟人了,今天咱们拿COMSOL搞个钢材料缺陷成像的骚操作。模型基础是压力声学模块,材料参数先给…...
