Предложения по повышению эффективности деятельности? - PullRequest
0 голосов
/ 19 октября 2010

друзья

я использую следующие глобальные переменные в своей деятельности

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 функциях. Теперь мой вопрос заключается в том, как улучшить производительность моей деятельности слишком медленно Должен ли я сделать их статическими или что?

любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 12 ноября 2010

рекомендуется кэшировать изображения и не выводить их снова и снова из Интернета.

, поэтому в моем случае при использовании настраиваемого адаптера и прокрутке он снова и снова загружал изображения из Интернета, что приводило к снижению производительности.

и проблема с утечкой памяти.

, поэтому я следовал этому уроку, чтобы загрузить живые изображения, и моя проблема была решена

Ответ: LazyList

http://mobilebitworks.wordpress.com/2010/11/05/android-listview-and-dynamically-loading-images-from-the-web

1 голос
/ 19 октября 2010

Ваши глобальные переменные почти наверняка не являются причиной вашей низкой производительности. Если вы не обращаетесь к ним миллион раз, это должно быть что-то еще. Если вы сообщите нам, что именно работает медленнее, чем вы ожидаете, и разместите соответствующий код, мы сможем вам помочь.

У вас есть много кода в вашем getView() методе. этот метод вызывается каждый раз, когда отображается новое представление. Поэтому, когда создается список, он называется N раз, где N - это количество элементов списка, которые видны. Затем, когда вы прокручиваете, каждый раз, когда на экране появляется новый элемент, getView() вызывается снова. Даже если вы затем прокрутите вверх, он снова вызовет getView().

Вам необходимо реорганизовать код, который не нужно запускать каждый раз, когда представление создается из представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...