# 18.8:再按一次退出应用

我们在使用第三方 APP 的时候会遇见点击返回键提示再按一次退出应用的场景,比如在短时间内不按,就不会退出 APP 达到留住用户的目的,接下来我们实现这个再按一次退出应用的例子。

# 18.8.1:组件生命周期

笔者在第九章 第 1 节 介绍过组件的生命周期,对于当前页面来讲,ArkUI 开发框架自动为其赋予了生命周期方法,比如 onPageShow()onPageHide()onBackPress() 方法,它们对应说明如下:

函数名 描述
onPageShow() 页面显示时触发该回调,包括路由过程、应用进入前后台等场景。
📢:仅 @Entry 修饰的自定义组件生效。
onPageHide() 页面消失时触发该回调,包括路由过程、应用进入前后台等场景。
📢:仅 @Entry 修饰的自定义组件生效。
onBackPress() 当用户点击返回按钮时触发,该方法返回 boolean 类型,默认返回 false
true:表示页面自己处理返回逻辑,不进行页面路由。
false:表示使用默认的返回逻辑。
📢:仅 @Entry 修饰的自定义组件生效。

# 18.8.2:完整样例

根据页面生命周期的方法可知,点击返回键的时候会调用 onBackPress() 方法,因此判断是否是第一次点击,如果是则返回 true 并给用户提示,如果不是则判断两次点击的时间间隔,若间间隔小于 2 秒,那么就直接退出 APP ,否则给用户提示,样例代码如下所示:

import app from '@system.app';
import prompt from '@ohos.prompt';

@Entry @Component struct ArkUIClubTest {

  private lastExitTime: number = -1;               // 记录点击时间

  @State count: number = 0;                        // 状态数据

  build() {
    Stack({alignContent: Alignment.BottomEnd}) {   // 堆叠式布局
      Text(this.count.toString())                  // 显示文本
        .fontSize(50)                              // 文字大小
        .textAlign(TextAlign.Center)               // 居中对齐
        .size({width: '100%', height: '100%'})     // 控件大小

      Button('+')                                  // 显示一个+按钮
        .size({width: 80, height: 80})             // 按钮大小
        .fontSize(50)                              // 按钮文字大小
        .onClick(() => {                           // 按钮点击事件
          this.count++;                            // count累加,触发build()方法回调
        })
        .margin(50)
    }
    .width('100%')
    .height('100%')
  }

  onBackPress() {
    if (-1 == this.lastExitTime) {                 // 第一次点击返回键,提示toast
      this.lastExitTime = new Date().getTime();
      prompt.showToast({
        message: "再按一次退出应用"
      })
      return true;
    } else {
      let currentTime = new Date().getTime();
      if(currentTime - this.lastExitTime > 2000) { // 时间大于2000提示
        prompt.showToast({
          message: "再按一次退出应用"
        })
        this.lastExitTime = currentTime;
        return true;
      } else {
        app.terminate();                           // 2秒内点击,退出APP
      }
    }
    return false;
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

样例运行结果如下图所示:

9_1_6_1
(adsbygoogle = window.adsbygoogle || []).push({});
请作者喝杯咖啡

津公网安备 12011402001367号

津ICP备2020008934号-2

中央网信办互联网违法和不良信息举报中心

天津市互联网违法和不良信息举报中心