【问题标题】:ionic 3 App restarts rather than resumesionic 3 App 重启而不是恢复
【发布时间】:2018-08-03 09:42:01
【问题描述】:

我创建了带有两个页面的离子应用程序,如果我导航到第 2 页,则从第 1 页。按下硬件后退按钮导航回第 1 页,并且再次硬件返回应用程序进入后台。如果从后台打开应用程序,则会重新加载启动画面并重新启动应用程序。

如何停止重新启动应用程序?

【问题讨论】:

  • 它在android中的常见行为!后退按钮实际上减少了应用程序的导航堆栈!当它到达堆栈的最后一项并在后面按下时,它会杀死应用程序的实例!再次调用它会重新启动! .....我没有清楚地看到这里的问题! @namrata。您是否愿意询问如何更改 BackPress 按钮的性质,以便在使用 HOME 按钮最小化应用程序时完成相同的操作?因为从主页按钮最小化使应用程序实例保持活动状态并恢复!和后退按钮杀死实例并重新启动
  • @Rizwanatta,是的,我想改变 BackPress 按钮的性质,以获得与使用 HOME 按钮最小化应用程序相同的行为。在 HardwareBack 我不想杀死应用程序的实例。就好像我恢复应用程序一样,启动画面也会再次重新加载
  • 检查我的答案,让我在 cmets 中知道这是否有帮助?

标签: android cordova ionic-framework ionic3


【解决方案1】:

我已经使用插件https://ionicframework.com/docs/native/app-minimize/ 来最小化应用程序

在 app.component.ts 中

从 '@ionic-native/app-minimize' 导入 { AppMinimize }; 从 'ionic-angular' 导入 { App, Platform };

构造函数(平台:平台,公共应用最小化:AppMinimize,公共应用:应用){ platform.ready().then(() => { platform.registerBackButtonAction(() => {

        let nav = app.getActiveNavs()[0];
        let activeView = nav.getActive();

            if (activeView.name === "Page1") {
                /** minimize the app in background **/
                this.appMinimize.minimize();
            }
            else {
                nav.pop();
        }

      });
  });

}

【讨论】:

    【解决方案2】:

    您可以显示警报以确认退出应用程序。按以下方式修改您的 app.component.ts 文件,

      import { Platform, IonicApp } from 'ionic-angular';
    
      constructor(public platform: Platform, private ionicApp: IonicApp){}
    
      initializeApp() {
        this.platform.ready().then(() => {
          //back button handle
          this.platform.registerBackButtonAction(() => {
              if (this.navctrl.canGoBack()) {
                this.navctrl.pop();
              } else {
                this.showAlert();
              }
          });
        });
      }
    
      showAlert() {
        let confirm = this.alertCtrl.create({
          title: 'Exit Application?',
          message: 'Do you want to exit this application?',
          buttons: [
            {
              text: 'No',
              handler: () => {}
            },
            {
              text: 'Yes',
              handler: () => {
                navigator['app'].exitApp();
              }
            }
          ]
        });
        confirm.present();
      }
    

    或者您可以简单地按主页按钮而不是返回按钮。因此它不会重新启动您的应用。

    【讨论】:

    • 感谢您的回复,实际上我的问题是如果我在主页上,点击 android 硬件返回,应用程序关闭(预期行为)。但是,如果我再次尝试从后台单击应用程序,应用程序会以启动画面重新启动。这不是预期的行为,我该怎么做才能避免这种情况
    【解决方案3】:

    好吧,正如您在 cmets 中解释的那样,这可能会有所帮助吗?

    请按照以下步骤操作:

    第一步:在您希望执行“自定义暂停”操作的页面中注册一个功能!

    第二步:在该自定义方法中注册订阅者并调用 ON PAUSE LISTENER ON,您可以在其中完成您的功能

    假设您有两个用于保存订阅者事件的字段变量 喜欢

    sub1$:any
    sub2$:any
    

    在构造函数中你可以做这样的事情!

      this.platform.ready().then(() => {
        this.platform.registerBackButtonAction(() => {
    
    
              this.sub1$=this.platform.pause.subscribe(() => {        
                  console.log('****YOURPAGE PAUSED****');
                this.appMinimize.minimize();
              }); 
            });
    
      });
    

    注意!!暂停事件可以被调用多次,所以你也应该取消订阅!同时像这样离开页面

    ionViewWillUnload() {
        this.sub1$.unsubscribe();
        this.sub2$.unsubscribe();
      }
    

    【讨论】:

    • 感谢@Riwan atta,但我遇到了错误 :: this.platform.pause()
    • @namratasalaskar 请投票给我的答案,因为它可能有点帮助! thnx 编辑虽然^_^
    【解决方案4】:

    这个帖子有几个月的历史了,但让我也添加这个解决方案。

    在您的 app.module.ts 中,将其添加(或修改)到您的导入中:

    IonicModule.forRoot(MyApp, { navExitApp: false}),

    这将防止您的应用在您位于导航堆栈的根页面时被关闭。

    但是请注意,如果您想将应用程序推送到后台,您仍然需要以另一种方式进行处理。 此解决方案仅防止您的应用被关闭。

    【讨论】:

      猜你喜欢
      • 2013-11-01
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 2018-01-05
      • 2022-08-14
      • 1970-01-01
      相关资源
      最近更新 更多