目录

侧滑退出应用响应慢

问题现象

侧滑屏幕退出应用时,需要等一段时间应用才退出,响应慢。

背景知识

问题定位

  1. 侧滑退出应用时如果采用默认的退出逻辑,响应时间会较短,出现响应慢现象则推测是应用实现了延时退出,可在日志中搜索onBackPress|KillApplicationSelf确认。

    如下图应用有重写onBackPress方法,同时在两次侧滑退出应用时有调用KillApplicationSelf方法关闭应用进程,第二次侧滑操作与关闭应用进程时间间隔1.2s,推测应用在侧滑响应处理时延迟退出应用进程。

    07-03 15:04:24.825   56626-56626  C03925/com.exa...ion/AceRouter com.examp...lication  I     [(100000:100000:scope)] router user onBackPress return true
    07-03 15:04:25.503   56626-56626  C03925/com.exa...ion/AceRouter com.examp...lication  I     [(100000:100000:scope)] router user onBackPress return true
    07-03 15:04:26.710   1458-2344    C01311/foundation/AppMS        foundation            W     [ams_mgr_stub.cpp:431]KillApplicationSelf,callingPid=56626
  2. 可在代码中搜索killAllProcesses找到退出应用进程的相关代码,如下代码中可看到两次侧滑后有延迟1.2s关闭应用进程,会导致侧滑退出响应慢的问题。
    onBackPress(): boolean | void {
      if (this.first) {
        this.first = false;
        // 延迟一段时间将this.first设置成true
      } else {
        setTimeout(() => {
          this.getUIContext().getHostContext()?.getApplicationContext().killAllProcesses().catch(() => {
             // TODO:Implement error handling.
          });
        }, 1200);
      }
      return true;
    }

分析结论

应用重写onBackPress方法,在侧滑时延迟退出应用进程,导致侧滑退出应用响应慢的问题。

修改建议