简要说明我在做什么:我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;
}
所以基本上我只是将TextViews
asArrays
和 inflated传递View
给AsyncTask
它的构造函数,然后初始化并将它们设置在一个循环中。
Fragments
当我在带有异常的应用程序崩溃之间滑动时,它有时会起作用(例如十分之 1) :
CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views
我知道这Exception
意味着什么,但问题是:为什么它会意外发生?
第二个问题:我猜在后台初始化和设置Views
不是要走的路。那么我怎样才能避免延迟Activity's
开始呢?