应用关闭时创建通知

时间:2017-09-13 04:59:46

标签: java android notifications ondestroy

我正在使用onDestroy方法,当应用关闭时,我并不总是会调用它。这给我带来了一个问题,我希望每次关闭应用程序时都会弹出通知。有一个更好的方法吗?顺便说一句,onStoponPause不适合我,因为我的应用程序作为后台服务运行。有趣的是,我的onDestroy方法在我的后台服务运行时每次都有效,但每当它关闭时,只有应用程序界面打开,我的onDestroy永远不会被调用。这看起来很奇怪,因为我认为如果设备缺少资源就不会调用onDestroy,而运行我的服务会占用更多的资源。 IDK。任何有关这方面的帮助将不胜感激!

`@Override
public void onDestroy(){
    super.onDestroy();

    Log.d("asdasd","asdasdasdasdasd");
    if(notif.isChecked()) {
        Intent intent1 = new Intent(this, MainActivity.class);
        PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent1, 0);
        Notification noti = new Notification.Builder(this)
                .setContentTitle("S-Dimmer")
                .setContentText(getResources().getString(R.string.sDimmerStopped))
                .setSmallIcon(R.drawable.ic_action_name1)
                .setContentIntent(pIntent).getNotification();
        noti.flags = Notification.FLAG_NO_CLEAR;
        NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        nm.notify(0, noti);
        doas.isRunning = false;
    }
}`

3 个答案:

答案 0 :(得分:0)

并不总是调用此方法,因此您应该尝试使用后台服务,因为还有一些销毁过程警报。 所以请尽量在服务中做你想做的事。

Please check out this ..

onDestroy()可能会或可能不会在任何给定的活动或服务上调用。一般规则是调用onDestroy(),或者终止进程,或者代码崩溃。

你没有。您的进程可能会在任何时候由用户或操作系统以任何理由终止。发生这种情况时,可能会或可能不会使用onDestroy()调用。虽然您可以通过服务上的onTaskRemoved()稍微提高您的成功率,但这本身已被证明是不可靠的,并且它不会涵盖所有情况。

答案 1 :(得分:0)

你这样做错了。在onDestroy方法中,所有其他东西应该在 super.onDestory()

之前实现

试试这个

@Override
public void onDestroy(){


    Log.d("asdasd","asdasdasdasdasd");
    if(notif.isChecked()) {
        Intent intent1 = new Intent(this, MainActivity.class);
        PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent1, 0);
        Notification noti = new Notification.Builder(this)
                .setContentTitle("S-Dimmer")
                .setContentText(getResources().getString(R.string.sDimmerStopped))
                .setSmallIcon(R.drawable.ic_action_name1)
                .setContentIntent(pIntent).getNotification();
        noti.flags = Notification.FLAG_NO_CLEAR;
        NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        nm.notify(0, noti);
        doas.isRunning = false;
    }
    super.onDestroy();
}`

答案 2 :(得分:0)

onTaskRemoved()
{
if(notif.isChecked()) {
        Intent intent1 = new Intent(this, MainActivity.class);
        PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent1, 0);
        Notification noti = new Notification.Builder(this)
                .setContentTitle("S-Dimmer")
                .setContentText(getResources().getString(R.string.sDimmerStopped))
                .setSmallIcon(R.drawable.ic_action_name1)
                .setContentIntent(pIntent).getNotification();
        noti.flags = Notification.FLAG_NO_CLEAR;
        NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        nm.notify(0, noti);
        doas.isRunning = false;
    } 
}