2

在我的代码中,我有一个带有按钮的活动,该按钮使用 viewpager 调用另一个活动,其中包含三个片段。

//...
ViewPager pager = (ViewPager) findViewById(R.id.pager);

ViewPagerAdapter adapterViewPager = new ViewPagerAdapter(getSupportFragmentManager());
        adapterViewPager.addFragment(new FragmentOne());
        adapterViewPager.addFragment(new FragmentTwo());
        adapterViewPager.addFragment(new FragmentThree());

        pager.setOffscreenPageLimit(4);
        pager.setAdapter(adapterViewPager);

//..

在页面/片段上,有一个从互联网加载数据(图像和文本)的列表视图,使用 AsyncTask 加载此数据

public class FragmentOne extends Fragment{

//...
    public class loadEntries extends AsyncTask<String, Void, String>{

        //...

        public String doInBackground(String... urls){
            String url = urls[0];

            try {
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);

                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                xml = EntityUtils.toString(httpEntity);

            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            return xml;
        }

        public void onPostExecute(String xml){
            try{
                entrieList = new ArrayList<HashMap<String, String>>();

                Document doc = getDomElement(xml); 

                NodeList nl = doc.getElementsByTagName(KEY_ENTRIE);

                for (int i = 0; i < nl.getLength(); i++) {

                    HashMap<String, String> map = new HashMap<String, String>();
                    Element e = (Element) nl.item(i);

                    map.put(KEY_ID_ENTRIE, getValue(e, KEY_ID_ENTRIE));
                    map.put(KEY_IMAGE_ENTRIE,getValue(e, KEY_IMAGE_ENTRIE));
                    map.put(KEY_TEXT_ENTRIE, getValue(e, KEY_TEXT_ENTRIE));

                    entrieList.add(map);
                }
                theListViewAdapter();

            } catch (Exception e) {
                // Exception
            }
        }
    }
//...

在我用来加快 ViewHolder 进程的每个 ListView 适配器中:

//...
  public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        View vi=convertView;
        if(convertView==null)
            vi = inflater.inflate(R.layout.row_gallery_web, null);
        holder = new ViewHolder();
        holder.text_one = (TextView)vi.findViewById(R.id.titleImageItemGalleryWeb); 
        holder.image_row=(ImageView)vi.findViewById(R.id.imageItemGalleryWeb);

        HashMap<String, String> items = new HashMap<String, String>();
        items = data.get(position);

        try { 
            String textentrie = new String(items.get(FRG_gallery_web.KEY_TITLE_IMAGE).getBytes("ISO-8859-1"));
            holder.text_one.setText(android.text.Html.fromHtml(textentrie));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();}

        imageLoader.DisplayImage(items.get(FRG_gallery_web.KEY_URL_IMAGE), holder.image_row);
        return vi;
    }

这是我的问题:

当我按下调用包含 viewpager 的活动的按钮时,加载片段时一切都冻结了。后台进程工作正常,因为我可以正确读取日志。为了更好地解释它,如果我按下调用包含 viewpager 的活动的按钮,在屏幕上显示一个进度条,这也会冻结。

除了每个片段的主体之外,我正在其他线程中从互联网加载数据。

充电时死机是什么原因?

我很感激任何帮助。

谢谢你。问候

4

0 回答 0