【问题标题】:Creating notification when app is closed应用关闭时创建通知
【发布时间】:2017-09-13 04:59:46
【问题描述】:

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

`@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;
    }
}`

【问题讨论】:

    标签: java android notifications ondestroy


    【解决方案1】:

    这个方法并不总是被调用,所以你应该从后台服务尝试,因为还有一些销毁过程警报。 所以请尝试在服务中做任何你想做的事情。

    Please check out this ..

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

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

    【讨论】:

      【解决方案2】:

      你做错了。在 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();
      }`
      

      【讨论】:

      • 不,你实际上错了......将 super.onDestroy 放在哪里并不重要,因为有时整个方法不会被触发。
      【解决方案3】:
      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;
          } 
      }
      

      【讨论】:

      • 查看了这个并找到了this 感谢您的帮助!赞成
      猜你喜欢
      • 1970-01-01
      • 2017-05-13
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多