weiraneve / tauri-mobile-demo

A tauri mobile demo
7 stars 2 forks source link

请问有关于应用状态恢复的代码吗 #1

Open Xiaobaishushu25 opened 3 weeks ago

Xiaobaishushu25 commented 3 weeks ago

我发现每次回到桌面在重新打开app后,整个

#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {}

函数都会重新运行。

weiraneve commented 3 weeks ago

话说这个点是会影响到你这边的什么需求或者功能吗,研究了一下,目前没找到方法取消这个。我自己也尝试了下,并不影响我自己一些app 从桌面回到app的状态。

Xiaobaishushu25 commented 3 weeks ago

话说这个问题是会影响到你这边的什么需求或者功能吗

你好,我试着用tauri做了一个手机应用,但是我发现每次回到桌面后在重新点击app后,我发现

#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
}

整个函数都会重新运行,等于是重新从头渲染整个app,而且此时再从js调用rust函数会报错: image

https://github.com/weiraneve/tauri-mobile-demo/assets/76581880/c43b84ec-e7d2-4c88-a672-2b5f4265ac28

我目前只好在退出app后直接强制鲨掉。 其实我原本是用flutter做的,我想找的是tauri有没有类似这个生命周期的东西:

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    super.didChangeAppLifecycleState(state);
    switch (state) {
      case AppLifecycleState.inactive: // 处于这种状态的应用程序应该假设它们可能在任何时候暂停。
        break;
      case AppLifecycleState.resumed: //从后台切换前台,界面可见
        //addLog("到前台了");
        checkConnect();
        break;
      case AppLifecycleState.paused: // 界面不可见,后台
        //addLog("应用处于不可见状态 后台======");
        break;
      case AppLifecycleState.detached: // APP结束时调用
        sendMessage(CloseMessage());
        break;
      case AppLifecycleState.hidden:
      // TODO: Handle this case.
    }
  }
weiraneve commented 3 weeks ago

tauri 2.0 里我暂时没看到rust相关的API控制这个原因,不过你可以在src-tauri目录生成的android的gen目录里,对于activity进行一些修改呢。我在tauri2官网里找到了一些关于安卓的生命周期控制的文如下 https://v2.tauri.app/develop/plugins/develop-mobile/#onnewintent

Xiaobaishushu25 commented 3 weeks ago

tauri 2.0 里我暂时没看到rust相关的API控制这个原因,不过你可以在src-tauri目录生成的android的gen目录里,对于activity进行一些修改呢。我在tauri2官网里找到了一些关于安卓的生命周期控制的文如下 https://v2.tauri.app/develop/plugins/develop-mobile/#onnewintent

感谢,我想问问就比如返回到桌面在点击app,你的是会完全重新运行整个app吗,比如我视频里面的输入的验证码,输入几个返回桌面后在点击回来,就完全都没有了,需要重新从头输入.

weiraneve commented 3 weeks ago

我目前的demo逻辑比较简单,我就加了个新路由页面也试了试,暂时没有出现热启动回来清除状态的情况

Xiaobaishushu25 commented 3 weeks ago

我目前的demo逻辑比较简单,我就加了个新路由页面也试了试,暂时没有出现热启动回来清除状态的情况

我把你项目拉下来跑了一下,回到桌面再点击app重新打开总是报错,不过确实保存了状态,我在研究一下.

06-11 14:01:05.297 11701 11701 I ImeTracker: com.weiran.app:14f363d: onRequestHide at ORIGIN_CLIENT_HIDE_SOFT_INPUT reason HIDE_SOFT_INPUT_BY_INSETS_API
06-11 14:01:05.299 11701 11701 I ImeTracker: com.weiran.app:f06e4d77: onHidden
06-11 14:01:09.584 11701 11701 W WindowOnBackDispatcher: sendCancelIfRunning: isInProgress=falsecallback=android.view.ViewRootImpl$$ExternalSyntheticLambda17@1ef4b38
06-11 14:01:10.506 11701 11739 I RustStdoutStderr: thread '<unnamed>' panicked at C:\Users\Xbss\.cargo\registry\src\rsproxy.cn-0dccff568467c15b\ndk-context-0.1.1\src\lib.rs:87:5:
06-11 14:01:10.506 11701 11739 I RustStdoutStderr: assertion failed: previous.is_none()
06-11 14:01:10.506 11701 11739 I RustStdoutStderr: note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
06-11 14:01:10.522 11701 11739 I RustStdoutStderr: fatal runtime error: failed to initiate panic, error 5
06-11 14:01:10.718 11701 11739 I RustStdoutStderr: [0611/140110.717865:ERROR:elf_dynamic_array_reader.h(64)] tag not found
--------- beginning of crash
06-11 14:01:10.740 11701 11701 F libc    : Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 11701 (com.weiran.app), pid 11701 (com.weiran.app)