2017-09-13 73 views
0

我使用的是onDestroy方法,我学到的方法在应用程序关闭时并不总是被调用。这给我造成了一个问题,我希望每次关闭应用程序时都会弹出通知。有一个更好的方法吗?顺便说一句,onStop和不适合我,因为我的应用程序作为后台服务运行。有趣的是,我的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; 
    } 
}` 

回答

0

这种方法并不总是被调用,所以你应该尝试从后台服务,因为还有一些销毁过程警报。 所以请尽量做你想要的服务。

Please check out this ..

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

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

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(); 
}` 
+0

Upvoted,谢谢。 –

+0

不,你其实是错的......把super.onDestroy放在哪里并不重要,因为有时整个方法不会被触发。 – mhdjazmati

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; 
    } 
} 
+0

看着这个,发现[这个](https://stackoverflow.com/questions/41744933/android-ondestroy-isnt-called-when-i-close-the-app-from-the-recent-apps-button? rq = 1)感谢您的帮助! Upvoted –

相关问题