Notification

package com.example.fdvasdasfaf;
import android.app.Notification;
import android.app.Notification.Builder;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
public class HelloBroadcastReceiver extends BroadcastReceiver{
private NotificationManager notificationManager = null;
private Context context;
int count = 0; //有时service会发出多条通知,我们用一个计数器来模拟不同的通知
private static final int NOTIFY_ME_ID=1337; //通知管理器通过通知ID来标识不同的通知,创建和删除通知是需要提供通知号。
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
System.out.println("0");
this.context=context;
showNotification(intent);
}
private void showNotification(Intent intent) {
count ++;
Resources res =context.getResources();
notificationManager=
(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
PendingIntent pendingIntent=PendingIntent.getActivity(context, 0, intent, 0);
Notification notification = new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_launcher)
.setTicker("showNormal").setContentInfo("contentInfo")
.setContentTitle("ContentTitle").setContentText("ContentText")
.setNumber(count)
.setContentIntent(pendingIntent)
.setAutoCancel(true).setDefaults(Notification.DEFAULT_ALL)
.build();
notificationManager.notify(NOTIFY_ME_ID, notification);
}

public void notifyClear( ){
notificationManager.cancel( NOTIFY_ME_ID );
}

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

package com.example.fdvasdasfaf;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class CdlRegisterActivity extends Activity {

private Context mContext;

private Button btnSendBroadcast;
private TextView etBroadcastContent;

@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.register_page);
mContext=this;
btnSendBroadcast= (Button)findViewById(R.id.btn_sendbroadcast);

btnSendBroadcast.setOnClickListener(new SendBroadcastClickListener() );
etBroadcastContent=(TextView) findViewById(R.id.et_broadcastContent);

}
@Override
protected void onSaveInstanceState( Bundle outState){
super.onSaveInstanceState(outState);
}
private class SendBroadcastClickListener implements OnClickListener{


@Override
public void onClick(View arg0) {

String content=etBroadcastContent.getText().toString().trim();

if(content.length()<1){
Toast.makeText(mContext, etBroadcastContent.getHint(), 1).show();
return ;
}
// TODO Auto-generated method stub

Intent intent=new Intent();
intent.setAction("android.intent.action.HelloBroadcastTest");
intent.putExtra("content",content);
sendBroadcast(intent);
}

}


}

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

<receiver android:name=".HelloBroadcastReceiver">
<intent-filter >
<action android:name="android.intent.action.HelloBroadcastTest" />
</intent-filter>
</receiver>

<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模式适配)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值