Notification

1. Notification构造器的参数 分别为:在状态条上显示的图标、文字和Notification的当前时间

// Choose a drawable to display as the status bar icon
int icon = R.drawable.icon;
 
// Text to display in the status bar when the notification is launched
String tickerText = “Notification”;
 
// The extended status bar orders notification in time order
// Notification显示的时间, currentTimeMills表示立即显示
long when = System.currentTimeMillis();

Notification notification = new Notification(icon, tickerText, when);

 

2. setLatestEventInfo()用来配置Notification在扩展的状态窗口中的外观 。扩展的状态窗口将显示图标和在构造函数中传入的时间,以及显示Notification标题和Notification内容。Notification可通过指定PendingIntent来触发。

Context context = getApplicationContext();
 
// Text to display in the extended status window
String expandedText = “Notification Text”;
 
// Title for the expanded status
String expandedTitle = “Notification Title”;
 
// Intent to launch an activity when the extended text is clicked
Intent intent = new Intent(this, MyActivity.class);
 
PendingIntent launchIntent = PendingIntent.getActivity(context, 0, intent, 0);
notification.setLatestEventInfo(context, expandedTitle, expandedText, launchIntent);

// Notification显示时会伴随音乐
// Notification.DEFAULT_VIBRATE:振动;Notification.DEFAULT_ALL:音乐+振动
notification.defaults = Notification.DEFAULT_SOUND;

使用setLastestEventInfo可更新数据集以呈现最新的消息(例如,接收多个SMS消息时更新SMS的数目)。任何对Notification的变更都需要重新触发setLastestEventInfo。振动需要在AndroidManifest.xml里进行下类设定

<uses-permission android:name="android.permission.VIBRATE"/>

3. Notification的触发和取消

NotificationManager.notify()和NotificationManager.cancel()。

每一个Notification都有一个唯一的id,这个id是开发者来指定的。

<think> 嗯,用户这次明确想了解IT领域中"notification"的相关信息,结合之前的引用资料和系统指令要求,需要构建一个全面但结构清晰的回答。用户提到的引用1正好涉及通知的并发处理案例,引用2提到领域事件和应用事件的分层概念,这些都可以自然融入回答。 用户身份推测可能是开发者或系统设计人员,因为ta关注的是技术实现层面而非普通用户视角的功能介绍。深层需求可能包括:如何避免通知重复处理(引用1的并发问题)、如何设计通知系统架构(引用2的事件分层)、以及实际落地时的技术选型。 从专业角度,应该覆盖四个维度:基础概念(定义/分类)、核心技术(推送机制/存储设计)、典型问题(并发/去重/延迟)、应用场景(微服务/前端)。特别要注意引用1中的并发标记问题,这需要展开说明锁机制或乐观锁解决方案;引用2的事件分层则可以关联到通知系统的领域驱动设计。 技术细节上需要强调:1. WebSocket和长轮询的对比要给出适用场景;2. 存储设计必须区分SQL/NoSQL的方案差异;3. 分布式场景下的ID生成策略(如雪花算法)。对于移动端通知的特殊性(APNs/FCM)要单独说明,这是开发者常踩的坑。 最后生成的问题要有递进性:从实现原理(问题1)到具体技术(问题2),再到架构设计(问题3),最后是实践难点(问题4),这样能引导用户深入探索。特别注意所有示例代码和公式必须严格遵循系统指令的LaTeX规范,比如事件模型要写成$E_{domain}$格式。 </think> 在IT领域中,**通知(Notification)** 是系统间或应用与用户之间传递信息的关键机制,其设计和实现涉及分布式系统、架构设计、用户体验等多方面。以下是核心要点: ### 一、基础概念与分类 1. **定义** 通知指系统主动触发的信息推送,用于状态变更提醒(如消息已读)、事件响应(如支付成功)或预警(如服务器宕机)。 2. **分类** - **用户级通知**:面向终端用户(App推送、邮件、短信) - **系统级通知**:服务间通信(微服务事件、任务队列消息) - **领域事件**:业务状态变更触发的内部事件(如订单支付完成)[^2] --- ### 二、核心技术实现 #### 1. **推送机制** - **WebSocket**:实时双向通信(聊天消息推送) - **长轮询(Long Polling)**:兼容性更强的准实时方案 - **服务端推送(SSE)**:单向数据流(股票价格更新) ```mermaid graph LR A[事件源] --> B[消息队列] B --> C{推送网关} C --> D[WebSocket] C --> E[APNS/FCM] C --> F[短信/邮件服务] ``` #### 2. **并发控制(引用[1]案例解析)** 当多个请求同时标记通知为已读时: ```python # 伪代码:使用数据库乐观锁避免并发冲突 def mark_as_read(notification_id): notification = Notification.query.get(notification_id) if notification.status == "unread": notification.update(status="read", version=notification.version+1) # 检查版本号是否匹配,防止覆盖 db.session.commit() ``` **关键点**:通过版本号(Versioning)或分布式锁(如Redis锁)保证操作的原子性。 #### 3. **存储设计** | 存储类型 | 适用场景 | 示例 | |----------------|---------------------------|--------------------| | SQL数据库 | 结构化通知(用户消息) | MySQL分区表存储 | | NoSQL | 高吞吐量推送日志 | MongoDB分片集群 | | 时序数据库 | 监控告警通知 | InfluxDB | --- ### 三、典型挑战与解决方案 1. **去重与顺序保证** - 为通知分配全局唯一ID(如雪花算法) - 消息队列使用分区键(Kafka Partition Key)保序 2. **跨平台适配** ```mermaid graph TB Backend -->|统一API| Gateway[iOS/Android/Web网关] Gateway --> APNS[Apple Push Service] Gateway --> FCM[Firebase Cloud Messaging] Gateway --> Webhook[第三方Webhook] ``` 3. **领域事件驱动(引用[2]概念)** 在DDD架构中: - **领域事件**:`OrderPaidEvent`(领域层内部流转) - **应用事件**:`PushNotificationEvent`(由网关层发送给外部系统) --- ### 四、应用场景 1. **微服务通信** 服务A完成支付 → 发布`PaymentCompletedEvent` → 通知服务B发货 $$ \text{Service A} \xrightarrow{\text{RabbitMQ}} \text{Service B} $$ 2. **用户交互系统** - 社交应用:评论实时提醒 - 运维监控:服务器异常告警推送 - 电商系统:订单状态变更短信 3. **前端实时更新** 结合React/Vue的响应式框架,通过WebSocket实现界面无刷新更新。 --- ### 五、移动端特殊考量 1. **系统级推送通道** - iOS:APNs(Apple Push Notification service) - Android:FCM(Firebase Cloud Messaging) 2. **省电策略** 批量合并通知(Doze模式适配)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值