Android O Notification之通知休眠流程

本文详细阐述了Android O系统中,当用户选择休眠通知时,从SystemUI进程如何通过INotificationManager传递到SystemServer进程,并通过AlarmManager设置定时广播,最终由NotificationManagerService执行通知休眠的详细步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一句话总结

在SystemUI进程中通过INotificationManager将要休眠的通知传递给SystemServer进程,SystemServer进程中通过AlarmManager定时发送一条广播让NotificationManagerService发送通知。

1.SystemUI进程中处理点击事件

点击通知休眠按钮,由NotificationSnooze的handleCloseControls处理

NotificationSnooze.java

if (mSnoozeListener != null && mSelectedOption != null) {
 // Snooze option selected so commit it
     mSnoozing = true;
     mSnoozeListener.snooze(mSbn, mSelectedOption);
}

经过一系列的转发,最终会调用到StatusBar的setNotificationSnoozed

NotificationStackScrollLayout.java

@Override
public void snooze(StatusBarNotification sbn, SnoozeOption snoozeOption) {
   mStatusBar.setNotificationSnoozed(sbn, snoozeOption);
}

StatusBar中有一个NotificationListenserService实例mNotificationListener。负责和NotificationManagerService跨进程(SystemServer)通信。NotificationListenserService中有一个内部类NotificationListernerWrapper实现了INotificationListener接口,这个才是具体实现。

StatusBar.java
 //一般为null
 if (snoozeOption.getSnoozeCriterion() != null) {
     mNotificationListener.snoozeNotification(sbn.getKey(),
              snoozeOption.getSnoozeCriterion().getId());
  } else 
<think>好的,我需要解决用户关于Android系统中交易应用的通知机制和连续亏损后操作限制的问题。首先,用户提到了Honor V3设备,但根据引用内容,Honor设备升级到Android 4.0后有一些操作变化,比如确定和取消按钮的位置调换,需要注意这点[^4]。用户的问题主要分为几个部分: 1. **交易提醒的通知机制和入场前提醒设置**:需要了解Android通知系统如何工作。引用[3]提到了NotificationManager的使用,可以通过getSystemService获取,这应该是发送通知的关键。同时,用户可能需要在应用内设置提醒的时间间隔,比如每隔一定时间提醒入场。另外,引用[1]提到Android 6.0之后的省电策略,如果应用不在白名单中可能会被杀死,所以需要确保应用在后台能持续运行,可能需要引导用户将应用加入电池优化的白名单。 2. **连续亏损3次后停止操作的实现**:这涉及到应用内的逻辑设计。当检测到连续三次亏损后,应用应禁用交易按钮或弹出提示,并记录日志。可能需要使用SharedPreferences或数据库来保存状态,确保即使应用被杀死,重启后也能读取到之前的记录。 3. **复盘分析功能**:需要将交易记录存储下来,可能用SQLite数据库或文件存储,并提供界面查看历史记录和统计信息,比如用图表展示亏损情况。 4. **合理时间间隔的设置方法**:用户可能希望自定义提醒的时间间隔,比如每30分钟提醒一次。这可以通过AlarmManager或WorkManager来实现定时任务,但要注意Android版本不同对后台任务的限制,特别是引用[1]提到的休眠模式,可能需要使用前台服务或者精确的闹钟权限。 接下来需要结合引用内容具体分析: - 引用[1]提到后台白名单的重要性,确保应用的通知能正常发送,避免被系统杀死,所以需要在回答中指导用户设置电池优化。 - 引用[3]给出了NotificationManager的获取方式,可以用来构建通知。 - 引用[4]提醒Honor设备的UI变化,特别是确定和取消按钮的位置,可能影响用户设置时的操作,需要提示用户注意。 可能的实现步骤: 对于入场提醒,使用AlarmManager设置重复的PendingIntent,触发广播接收器或服务,然后发送通知。但Android 6.0后可能需要使用JobScheduler或WorkManager来优化后台任务,避免被系统限制。同时,通知渠道(Notification Channel)在Android 8.0及以上是必须的,需要创建对应的渠道。 连续亏损的记录可以使用SharedPreferences存储计数,每次交易失败时增加计数,达到3次后禁用功能,并弹出对话框提示。复盘分析则需要更持久的数据存储,可能需要结合数据库。 最后,关于时间间隔的设置,应用内应提供设置界面让用户选择间隔时间,然后通过WorkManager安排定期任务,这样更符合现代Android的最佳实践,尤其是在处理后台任务时。 需要确保代码示例正确,比如发送通知的代码,设置AlarmManager或WorkManager,以及存储数据的例子。同时,提醒用户Honor系统的UI差异,避免操作错误。</think>### Android交易应用的通知机制与操作限制设置方法 #### 一、交易入场前提醒通知设置 1. **通知机制基础** Android通过`NotificationManager`管理系统通知[^3],需先创建通知渠道(Android 8.0+要求)。示例代码: ```java // 创建通知渠道(仅需执行一次) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel channel = new NotificationChannel("trade_channel", "交易提醒", NotificationManager.IMPORTANCE_HIGH); channel.setDescription("入场时间提醒"); notificationManager.createNotificationChannel(channel); } // 发送通知 NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "trade_channel") .setSmallIcon(R.drawable.ic_trade) .setContentTitle("入场时间提醒") .setContentText("当前市场条件满足预设策略"); notificationManager.notify(notificationId, builder.build()); ``` 2. **时间间隔控制** 使用`AlarmManager`或`WorkManager`实现周期性提醒: ```java // 使用WorkManager设置每30分钟提醒(兼容省电策略) PeriodicWorkRequest reminderRequest = new PeriodicWorkRequest.Builder( ReminderWorker.class, 30, TimeUnit.MINUTES ).build(); WorkManager.getInstance(context).enqueue(reminderRequest); ``` **注意**:Android 6.0+需引导用户将应用加入电池优化白名单,防止进程被终止[^1]。路径:设置 > 电池 > 电池优化 > 未优化应用。 --- #### 二、连续亏损3次后的操作限制 1. **状态记录与判断** 使用`SharedPreferences`存储交易记录: ```java SharedPreferences prefs = getSharedPreferences("trade_stats", MODE_PRIVATE); int lossCount = prefs.getInt("loss_count", 0); // 亏损时更新计数 if (isLoss) { lossCount++; prefs.edit().putInt("loss_count", lossCount).apply(); } // 达到3次时锁定交易 if (lossCount >= 3) { showLockDialog(); disableTradeButtons(); } ``` 2. **复盘分析实现** - **数据存储**:建议使用SQLite数据库记录每次交易的`时间、策略类型、盈亏结果` - **分析界面**:通过`RecyclerView`展示历史记录,结合MPAndroidChart库生成盈亏趋势图 --- #### 三、Honor V3设备特别注意事项 1. **操作习惯调整** 升级Android 4.0后,"确定"与"取消"按钮位置对调,需在设置界面添加明显视觉提示,避免误操作。 2. **系统兼容性处理** ```java // 检测Honor系统特性 if (Build.MANUFACTURER.equalsIgnoreCase("honor")) { applyHonorSpecificLayout(); // 调整按钮布局 } ``` --- #### 四、完整实现流程图 ```mermaid graph TD A[用户启动应用] --> B{检查电池白名单} B -- 未加入 --> C[引导用户设置] B -- 已加入 --> D[初始化通知渠道] D --> E[启动WorkManager定时提醒] E --> F[交易操作] F --> G{是否亏损?} G -- 是 --> H[更新亏损计数器] H --> I{达到3次?} I -- 是 --> J[锁定交易功能] I -- 否 --> F G -- 否 --> K[重置计数器] ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值