Android实现点击按钮后延迟10秒推送通知的方法问询
实现方案
你可以通过Handler的postDelayed方法实现10秒延迟触发通知,这是当前场景下最简单可靠的实现方式,修改步骤如下:
第一步:添加全局变量
在MainActivity类中新增Handler和Runnable全局成员,避免多次点击产生重复任务,同时适配Android新版本对Handler的规范要求:
private Handler delayHandler = new Handler(Looper.getMainLooper()); private Runnable notifyRunnable;
第二步:修改sendOnChannel方法
把原本的通知发送逻辑封装到Runnable中,通过postDelayed设置10秒(10000毫秒)延迟:
public void sendOnChannel(View view){ String title = editTextTitle.getText().toString(); String message = editTextMessage.getText().toString(); // 先移除之前未执行的任务,避免多次点击重复触发 if(notifyRunnable != null){ delayHandler.removeCallbacks(notifyRunnable); } notifyRunnable = new Runnable() { @Override public void run() { Notification notification = new NotificationCompat.Builder(MainActivity.this,CHANNEL_1_ID) .setSmallIcon(R.drawable.ic_one) .setContentTitle(title) .setContentText(message) .setCategory(NotificationCompat.CATEGORY_MESSAGE) .build(); notificationManager.notify(1, notification); } }; // 10000毫秒 = 10秒延迟 delayHandler.postDelayed(notifyRunnable, 10000); }
第三步:销毁页面时清理任务
避免页面销毁后任务继续执行导致内存泄漏,重写onDestroy方法:
@Override protected void onDestroy() { super.onDestroy(); if(delayHandler != null && notifyRunnable != null){ delayHandler.removeCallbacks(notifyRunnable); } }
注意:需要在文件头部补充
import android.os.Handler;和import android.os.Looper;两个导入语句,否则会报错。
特殊场景适配
如果需要APP退到后台甚至被杀死后仍能按时触发通知,可以改用AlarmManager或者WorkManager实现,普通前台使用场景下上述方案足够满足需求。
内容的提问来源于stack exchange,提问作者Imatabil
相关产品推荐
相关产品推荐

