android - 启动所有选项卡的 Activity 以进行预缓存

标签 android performance multithreading android-tabhost

我有一个定义了三个选项卡的TabActivity。第一个选项卡是轻量级的,并且在可接受的时间内呈现。但是,在我单击第二个和第三个选项卡后,确实需要几秒钟才能进行视觉渲染。我想在加载第一个选项卡后在后台启动它们以进行预缓存。一旦它们被加载,我就可以在它们之间快速切换。

所以我想知道如何启动第二个和第三个选项卡。它们是加载到 View 区域中的新 Activity

最佳答案

第 1 步:删除所有用作选项卡内容的 Activity 。

第 2 步:将它们重写为 Views(TabHost Activity 的主布局文件中 FrameLayout 的子级),以及让它发挥作用。将 Activity 作为选项卡的内容会增加开销,但没有任何有意义的好处。

如果这不足以提高性能,那么......

第 3 步:将第二个和第三个选项卡移至单独的布局文件中。在 onCreate() 中对它们进行充气,但只需按住它们(不要将它们附加到 TabHost)。添加选项卡规范时,请使用采用 TabContentFactory 的选项卡规范,并让工厂获取预构建的 Views

如果这只是将您的性能问题转移到 onCreate() 上,那么...

第 4 步:尝试在后台线程中扩充和设置这些 View 。这可能会导致崩溃,因为 Android 不喜欢后台线程上的 UI 操作。即使它确实有效,您也需要聪明地处理用户在完成工作之前单击第二个选项卡的可能性。

或者,您可以加快这些选项卡尝试执行的任何操作,这样它们就不会花费太多时间,至少在一开始是这样。

关于android - 启动所有选项卡的 Activity 以进行预缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2530486/

相关文章:

functional-programming - 高效的不可变 map 实现?

java - xuggle并发转码

android - 如何在sinch有效负载中发送额外数据

android - MPAndroidChart - 为什么 BarData 构造函数不起作用?

android - Android 中多次调用 ffmpeg main 失败

c++ - 《C++ Concurrency In Action》中的可中断线程示例

multithreading - Rust 中使用的 "await"是什么意思?

android - roboguice 注入(inject)客户

MySQL 多数据库模式更新 => 性能

c - 预计算指数 (exp) 表