我有一个活动,其中包含一个导航抽屉,当按下不同的导航项时会显示不同的片段。问题是这些碎片中的一个在加载时有明显的延迟。Android - 在交换片段之前加载片段的视图
在我的活动的onCreate
方法中,我启动了一个线程,我要预先加载每个片段,以便在用户按下导航项时可以很容易地进行交换。
我的代码看起来是这样的:
public class MainActivity extends Activity {
protected void OnCreate {
// Get instance of Thread InitialiseNavFrags.
InitialiseNavFrags fragmentInit = new InitialiseNavFrags();
fragmentInit.start();
}
private void selectItem(position) {
...
final FragmentTransaction ft = getFragmentManager().beginTransaction();
// Wait until sportsFragment is loaded.
while (sportsFragment == null) {
try {
Thread.sleep(300);
} catch (InterruptedException e) {
System.out.println("Caught InterruptedException :" + e);
}
}
// Switches fragments to FavouriteFragment
ft.replace(R.id.content_fragment, sportsFragment, "Sports");
// Noticeable delay here
ft.commit();
}
...
class InitialiseNavFrags extends Thread {
public void run() {
favouriteFragment = new FavouriteFragment();
sportsFragment = new SportFragment();
}
}
}
public class SportsFragment extends Fragment {
public View onCreateView (...) {
// Task with noticeable delay
return view;
}
}
我的问题是SportFragment
小号selectItem
执行的onCreateView
直到MainActivity
没有得到执行“和片段交换这会导致明显的延迟时用户按下导航项目。
那么,是否有可能初始化片段的视图,以便没有明显的延迟?
你不应该在主UI线程上使用'Thread.sleep()'。您不应该在后台线程上创建这些片段,而是尝试改进错误的onCreateView()的onCreateView()(太多视图?)。 – Luksprog 2014-08-30 04:38:52