2010-10-19 57 views
0

朋友,提高活动绩效的建议?

我使用按照我的活动全局变量

private String Session_ID; 
    private String uid; 

    // menu item starts 
    private final int Trash = 0x003; 
    private final int More = 0x005; 
    private final int SignOut = 0x006; 
    private final int SignIn = 0x007; 
    //menu item ends 

    private EfficientAdapter adap; 

    private String[] Msg_id; 
    private String[] Msg_body; 
    private String[] Sent_by; 
    private String[] Sent_on; 
    private String[] Is_my_message; 
    private String[] Photo_thumbnail; 
    private String[] Photo_full_path; 


    private String Conversation_id; 
    ProgressBar progressBar; 
    Button getMoreButton; 


    boolean callComplete = false; 
    private Handler mHandler = new Handler(); 
    private int PageSize = Constants.pageSizeForMessages; 
    Object serviceData = null; 


    private String ConversationName; 
    private Uri selectedImage; 





public class EfficientAdapter extends BaseAdapter implements Filterable { 
        private LayoutInflater mInflater; 
        private Context context; 

        public EfficientAdapter(Context context) { 
         mInflater = LayoutInflater.from(context); 
         this.context = context; 
        } 


        public View getView(final int position, View convertView, ViewGroup parent) { 
         ViewHolder holder; 
         convertView = mInflater.inflate(R.layout.adaptor_contentmessagedetail, null); 
         holder = new ViewHolder(); 

         holder.ImgPhoto = (ImageView)convertView.findViewById(R.id.ImgPhoto); 
         holder.lblMsgSentBy = (TextView) convertView.findViewById(R.id.lblSentBy); 
         holder.lblMsgBody = (TextView) convertView.findViewById(R.id.lblMessageBody); 
         holder.lblMsgSentOn = (TextView) convertView.findViewById(R.id.lblSentOn); 


         convertView.setOnClickListener(new OnClickListener() { 
           @Override 
           public void onClick(View v) { 

            if (!((MessageDetail)v.getContext()).isConnected()) { 
             Constants.DisplayMessage(v.getContext(), 
               Constants.CONNECTION_ERROR_MESSAGE); 
             return; 
            } 


            if(!Photo_full_path[position].equals("")) 
            { 

             String str= Photo_full_path[position].substring(Photo_full_path[position].length() - 3); 
             if(str.equals("pdf")) 
             { 


             }else 
             { 

            Intent myIntent = new Intent(v.getContext(), ViewSingleImage.class); 
            Bundle b = new Bundle(); 
            b.putString("single_image_path", Photo_full_path[position]); 
            myIntent.putExtras(b); 
            v.getContext().startActivity(myIntent); 
             } 

            } 

           } 
          }); 





         convertView.setTag(holder); 


         // Bind the data efficiently with the holder. 

         if(Is_my_message[position].equals("1")) 
          holder.lblMsgSentBy.setTextColor(Color.BLACK); 
          else 
          holder.lblMsgSentBy.setTextColor(Color.rgb(255, 107, 1)); 



        SimpleDateFormat fromUser = new SimpleDateFormat(Constants.SERVICE_DATE_FORMAT); 
        java.text.DateFormat df=new SimpleDateFormat(Constants.DATE_FORMAT);       
        Date dt=new Date(); 
        try 
        { 
         dt = fromUser.parse(Sent_on[position]); 

        } catch (java.text.ParseException e) { 
         e.printStackTrace(); 
        } 





        // display photo 
        if(!Photo_thumbnail[position].equals("")) 
        { 

        // resize it 
         holder.ImgPhoto.setImageBitmap(DisplayLiveImage(Photo_thumbnail[position])); 

        }else 
        { 
         holder.ImgPhoto.setVisibility(View.GONE); 

        } 
        // display photo 



         holder.lblMsgSentBy.setText(Constants.GetSpecialCharacters(Sent_by[position])); 
         holder.lblMsgBody.setText(Constants.GetSpecialCharacters(Msg_body[position])); 
         holder.lblMsgSentOn.setText(df.format(dt)); 


         return convertView; 
        } 

        class ViewHolder { 

         ImageView ImgPhoto; 
         TextView lblMsgSentBy; 
         TextView lblMsgBody; 
         TextView lblMsgSentOn; 

        } 

        @Override 
        public Filter getFilter() { 
         // TODO Auto-generated method stub 
         return null; 
        } 

        @Override 
        public long getItemId(int position) { 
         // TODO Auto-generated method stub 
         return 0; 
        } 

        @Override 
        public int getCount() { 
         // TODO Auto-generated method stub 
         return Msg_id.length; 
        } 

        @Override 
        public Object getItem(int position) { 
         // TODO Auto-generated method stub 
         return Msg_id[position]; 
        } 

        } 

public Bitmap DisplayLiveImage(String ImageSrc) 
     { 
      Bitmap bm; 
         try { 

           URL aURL = new URL(ImageSrc); 
           URLConnection conn = aURL.openConnection(); 

           conn.connect(); 
           InputStream is = null; 
           try 
           { 
            is= conn.getInputStream(); 
           }catch(IOException e) 
           { 
            return null; 
           } 

           BufferedInputStream bis = new BufferedInputStream(is); 

           bm = BitmapFactory.decodeStream(bis); 
           bis.close(); 
           is.close(); 

          } catch (IOException e) { 
           return null; 
          } 

          return bm; 

     } 

我已经让他们全球的活动,因为我需要他们所有超过1个功能 现在我的问题是如何提高性能我的活动太慢了 我应该让它们变成静态还是什么?

任何帮助,将不胜感激。

回答

1

你的全局变量几乎肯定不是你糟糕的表现的原因。除非你访问他们一百万次,否则它一定是别的。如果您告诉我们执行速度比您期望的要慢,并发布相关代码,我们可能会提供帮助。

您的getView()方法中有很多代码。这个方法在每次显示新视图时都会被调用。所以当listview被创建时,它被称为N次,其中N是被看到的列表元素的数量。然后当您滚动时,每次有新元素进入屏幕时,getView()会再次被调用。即使您再次向上滚动,它也会再次调用getView()

您需要重构代码,每次创建视图时不需要运行该代码。

+0

我想补充一点,找出代码是缓慢的,你可以使用SDK中提供的traceview工具。这将有助于找出代码花费大部分时间的地方。 – Jean 2010-10-19 09:58:09

+0

理解起来非常复杂..我用过这个工具没有什么可以理解的。 :(哪个函数需要多少内存等..任何方式谢谢。 – UMAR 2010-10-19 10:34:51

+0

那么你的代码有多长?也许发布一些部分,并告诉我们究竟是什么表现比你想要的慢。如果你正在UI上运行网络操作如果你正在等待后台线程可以做到这一点,如果你正在循环巨大的数组,可以做到这一点。有无数种方法让你的代码变得很慢 – Falmarri 2010-10-19 17:19:42