返回上一页时,Android应用程序中的服务连接泄漏

Posted

技术标签:

【中文标题】返回上一页时,Android应用程序中的服务连接泄漏【英文标题】:Service Connection Leak in android app when back to a previous page 【发布时间】:2018-01-31 23:46:00 【问题描述】:

您好,我正在开发一个打卡进出考勤应用程序,它有一个定时器服务,当用户打卡时运行。我遇到的问题是当我启动该服务,然后按手机上的返回按钮返回到上一页我得到一个服务连接泄漏,我不知道如何解决这个问题,因为它似乎停止了服务。

//onStart - 在服务类中启动定时器

     public int onStartCommand(Intent intent, int flags, int startId) 
            manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
            displayNotification("Clock in timer started");
            clockTask = new TimerTask() 
                public void run() 
                    seconds++;
                
            ;
            startCounter();

            return START_STICKY;
        

//onDestroy to stop the service and counter
 public void onDestroy() 
        super.onDestroy();
        long mins = seconds/60;
        seconds%=60;
        long hours = mins/60;
        mins%=60;
        stopCounter();
        // manager.cancel(R.string.notification);
        displayNotification("Clocked out after : "+""+hours+":"+mins+":"+String.format("%02d",seconds));
        //seconds = 0L;
    

//我如何在我的活动类中绑定意图

   Intent i = new Intent(this, StartTimerService.class);
        bindService(i, seamysConnection, Context.BIND_AUTO_CREATE);

enter image description here

任何帮助将不胜感激

【问题讨论】:

【参考方案1】:

android 操作系统销毁 Activity 并发现 A ServiceConnection 仍绑定到正在运行的 Service 时会发生这种情况,因此您需要在销毁您的 Activity 之前 Unbind 服务(返回上一页 )

解除绑定服务器

unbindService(seamysConnection);

注意:

您应该使用相同的context 来绑定服务和取消绑定服务。如果您将服务与getApplicationContext() 绑定,那么您还应该使用getApplicationContext.unbindService(..)

【讨论】:

以上是关于返回上一页时,Android应用程序中的服务连接泄漏的主要内容,如果未能解决你的问题,请参考以下文章

为啥当我返回上一页时,我的 url 不正确(iOS 下的 Chrome,浏览器返回)

网页返回上一页时自动刷新页面

返回上一页时,保存恢复浏览记录(模拟返回不刷新)

thinkphp分页时把后一页记录全部删除,如何返回上一页

ionic5 webview 应用程序浏览器事件与 android 设备后退按钮不同步

Nextjs如何在转到下一页时不卸载上一页(保持状态)