简要说明我在做什么:我FragmentActivity通过 a 托管 4 个片段ViewPager,这些片段是在我的扩展类中创建的Fragment。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = null;
switch (mPage) {
case 1:
view = inflater.inflate(R.layout.frag1,
container, false);
initFrag1(view);
break;
// ....... and so on
}
return view;
}
在onCreateView()方法中,我根据页面(片段)初始化数据。每个 Fragment 都有一个相当复杂的布局,其中包含很多TextViews. 当FragmentActivity用户单击上一个ListItem中的a 时开始Activity,并且在开始之前有大约 0.5-1 秒的延迟FragmentActivity。我的考虑是延迟是由初始化和设置大量 引起的TextViews,所以我尝试在一个中做所有这些事情AsyncTask:
@Override
protected Void doInBackground(Void... params) {
DecimalFormat df = new DecimalFormat("#0.00");
for (int i = 0; i < FirstTextViewArray.length; i++) {
tmp = (TextView) v.findViewById(FirstTextViewArray[i]);
tmp.setText("test " + String.valueOf(i));
}
for (int i = 0; i < SecondTextViewArray.length; i++) {
tmp = (TextView) v.findViewById(SecondTextViewArray[i]);
tmp.setText(df.format((SomeClass
.getSomeFloatArray(Constants.tmpObject.getSomeInt())[i]));
}
return null;
}
所以基本上我只是将TextViewsasArrays和 inflated传递View给AsyncTask它的构造函数,然后初始化并将它们设置在一个循环中。
Fragments当我在带有异常的应用程序崩溃之间滑动时,它有时会起作用(例如十分之 1) :
CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views
我知道这Exception意味着什么,但问题是:为什么它会意外发生?
第二个问题:我猜在后台初始化和设置Views不是要走的路。那么我怎样才能避免延迟Activity's开始呢?