本地通知崩溃应用程序android java
Posted
技术标签:
【中文标题】本地通知崩溃应用程序android java【英文标题】:Local notification crashes app android java 【发布时间】:2017-02-22 10:30:57 【问题描述】:当我尝试从本地通知打开我的应用程序时崩溃。 通知应该在 5 秒后发送,但有时会发送,有时需要更长的时间,有时根本不发送。
public void sendPushNotificationUpdate()
new Print("SEND NOTIFICATION");
AlarmManager service = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(MyService.this, LocalNotification.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pending = PendingIntent.getBroadcast(MyService.this, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
Calendar cal = Calendar.getInstance();
// Start 1 month after boot completed
cal.add(Calendar.SECOND, 5);
new Print("send notification at " + cal.getTime());
//
// Fetch every 1 month
// InexactRepeating allows android to optimize the energy consumption
// service.setInexactRepeating(AlarmManager.RTC_WAKEUP ,cal.getTimeInMillis(), AlarmManager.ELAPSED_REALTIME , pending);
service.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_HOUR, pending);
/////////////////////////////////////// /////////////////////////////
Intent notificationIntent = new Intent(context, MainActivity.class);
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP |
Intent.FLAG_ACTIVITY_NEW_TASK);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addParentStack(MainActivity.class);
stackBuilder.addNextIntent(notificationIntent);
PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, 0);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Notification notification = builder
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("TEST")
.setContentText(title)
.setSound(soundUri)
.setAutoCancel(false)
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(title))
.setPriority(Notification.PRIORITY_MAX)
.setContentIntent(pendingIntent).build();
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notification);
由于我发送了通知,因此日志显示如下:
I/System.out: RECEIVE LOCAL NOTIFICATION
I/System.out: DISABLE SERVICEEEEEEEEEEEEEEEEEEEEEEEEEEEE
I/System.out: Database exists
D/Background mode ->: VERIFY INTERNET CONNECTION
D/Background mode ->: NO CONNECTION AVAILABLE
I/System.out: DELEGATE STARTS
V/FA: onActivityCreated
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
W/SQLiteConnectionPool: A SQLiteConnection object for database '/data/data/com.test/databases/db.db' was leaked! Please fix your application to end transactions in progress properly and to close the database when it is no longer needed.
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
V/ztgl: asset != NULL
I/System.out: Between 22.02.2017 - 10:50 and 22.02.2017 - 11:20 there are:
I/System.out: 0 days, 0 hours, 30 minutes, 0 seconds
V/FA: Using measurement service
V/FA: Connecting to remote service
V/FA: Activity resumed, time: 182309534
I/Choreographer: Skipped 30 frames! The application may be doing too much work on its main thread.
D/Background mode ->: Service destroyed
I/System.out: Between 22.02.2017 - 10:50 and 22.02.2017 - 11:20 there are:
I/System.out: 0 days, 0 hours, 30 minutes, 0 seconds
I/Process: Sending signal. PID: 20941 SIG: 9
/////////////////////////////////////// /
这就是我目前所拥有的。我在互联网上四处张望,但找不到任何东西可以解决我的问题。 感谢您的帮助。
与 Unfortunately MyApp has stopped. How can I solve this? 不同,我要问一个关于本地通知的具体问题。 @Vlad Matvienko
【问题讨论】:
发布您的 logcat 错误 您必须发布您的崩溃报告。 Unfortunately MyApp has stopped. How can I solve this?的可能重复 抱歉,堆栈没有正确保存代码。我现在已包含崩溃报告 见A SQLiteConnection object for database /data/data/com.test/databases/db.db was leaked! Please fix your application to end transactions in progress properly and to close the database when it is no longer needed.
。这意味着您以前使用过数据库,并且没有关闭该对象。现在您正在泄漏数据库。正确处理数据库对象状态。
【参考方案1】:
看到这一行:
数据库的 SQLiteConnection 对象 /data/data/com.test/databases/db.db 被泄露了!请修复您的 申请以正确结束正在进行的交易并关闭 不再需要的数据库。
这意味着您以前使用过数据库,并且没有关闭该对象。现在您正在泄漏数据库。正确处理数据库对象状态。
【讨论】:
以上是关于本地通知崩溃应用程序android java的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 协程协程异常处理 ④ ( Android 协程中出现异常导致应用崩溃 | Android 协程中使用协程异常处理器捕获异常 | Android 全局异常处理器 )
Kotlin 协程协程异常处理 ④ ( Android 协程中出现异常导致应用崩溃 | Android 协程中使用协程异常处理器捕获异常 | Android 全局异常处理器 )