【发布时间】:2014-05-02 00:12:40
【问题描述】:
目前我正在将现有的 C# Windows 8 / iOS 应用程序移植到 Android(使用 Xamarin)。
我在文件 IO、对话框、网络等方面使用了很多 async/await……
在等待调用期间应用暂停/暂停时会发生什么? 在 Windows 和 iOS 下有两种可能:
- 应用程序稍后恢复,好像什么都没发生过一样
- 如果内存不足,应用程序将终止。
在这两种情况下,都没有内存泄漏,控制流没有变化。
但是,在 Android 下,可以在进程保持活动状态时销毁并重新创建 Activity。在我对 async/await 的理解中,这意味着:
- 未关闭的对话框将永远等待,这意味着可从调用者访问的对象(“this”、局部变量等)将永远留在内存中(内存泄漏)
- 当等待的网络请求完成而前一个 Activity 已被 Android 销毁时,“等待”之后的代码(例如文件写入)可能会发生冲突,因为存在 Activity 的两个正在运行的实例。
我的假设是真的吗?如果是,可以做什么? (没有让程序像以前发明 async/await 那样复杂)
【问题讨论】:
-
不处理网络的,20ms左右的任务,同步运行即可
-
@Sarge Borsch:我正在将现有的 Windows 8 应用程序移植到 Android。 Windows 8 需要异步文件读/写和对话框。我想尽可能多地重用代码。所以我不想删除 100 个等待并更改所有辅助方法。 (我使用的是 Xamarin,所以理论上我几乎可以重用所有内容。)
-
这只是理论上的......您可能不仅要更改整个 UI 代码/标记,还要更改一些实际逻辑
标签: c# android xamarin.android xamarin async-await