2016-12-13 7 views
0

Я разрабатывал приложение, и в некоторых устройствах была проблема с производительностью, как с той же конфигурацией, но с разницей бренда. Я использую два устройства lenovo и samsung. с теми же процессорами, что и в одном RAM. Приложение ведет себя по-разному на обоих устройствах на Samsung, он висит, и на lenovo он отлично работает. есть ли что-то не так с моим кодом, или у кого-нибудь еще была такая же проблема и нашли какое-либо решение?Что пошло не так: приложение зависает на некоторых устройствах?

// залп запрос

private void request() { 
      StringRequest stringRequest = new StringRequest(Request.Method.POST, url + "abc.php", 
        new Response.Listener<String>() { 
         @Override 
         public void onResponse(String response) { 
          systemm.out("Daily Dose"+response); 
          try { 
           JSONArray jArray = new JSONArray(response); 
           int count = jArray.length(); 
           for (int i = 0; i <= count; i++) { 
            JSONObject j = jArray.getJSONObject(i); 

            Item itemm=new Item(); 
            itemm.setUrlPic(j.getString("image")); 
            itemm.setPicCount(j.getString("imcount")); 
            itemm.setName(CapitalLetter.AllFirstLetterWithBlanckSpace(Basee64.Decode2(j.getString("fname"))+" " 
              +Basee64.Decode2(j.getString("lname")))); 
            itemm.setAbout(CapitalLetter.AllFirstLetterWithBlanckSpace(Basee64.Decode2(j.getString("fullabout")))); 
            itemm.setAgeHeight(j.getString("age")+"," 
              +Basee64.Decode2(j.getString("height"))); 
            itemm.setMaritalStatus(Basee64.Decode2(j.getString("marital"))); 
            itemm.setReligion(Basee64.Decode2(j.getString("religion"))); 
            itemm.setEat(Basee64.Decode2(j.getString("food"))); 
            itemm.setDrink(Basee64.Decode2(j.getString("drink"))); 
            itemm.setSmoke(Basee64.Decode2(j.getString("smoke"))); 
            itemm.setLocation(CapitalLetter.FirstLetter(Basee64.Decode2(j.getString("city")))+"," 
              +CapitalLetter.FirstLetter(Basee64.Decode2(j.getString("state")))+"," 
              +CapitalLetter.FirstLetter(Basee64.Decode2(j.getString("country")))); 
            itemm.setQualification(Basee64.Decode2(j.getString("education"))); 
            itemm.setAnnualIncome(Basee64.Decode2(j.getString("income"))); 
            items.add(itemm); 
            show(page); 
           } 

          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 
         } 
        }, 
        new Response.ErrorListener() { 
         @Override 
         public void onErrorResponse(VolleyError error) { 
          systemm.out("Daily Dose"+error.getMessage()); 

         } 
        }){ 
       @Override 
       protected Map<String,String> getParams(){ 
        Map<String,String> params = new HashMap<String, String>(); 
        params.put("uid", "1"); 
        return params; 
       } 

      }; 
      RequestQueue requestQueue = Volley.newRequestQueue(activityy); 
      requestQueue.add(stringRequest); 
     } 

     private void show(int i) { 

      Item it=items.get(i); 
      nameTv.setText(it.getName()); 
      aboutTv.setText(it.getAbout()); 
      age_height_Tv.setText(it.getAgeHeight()); 
      maritalStatusTv.setText(it.getMaritalStatus()); 
      religionTv.setText(it.getReligion()); 
      eatTv.setText(it.getEat()); 
      drinkTv.setText(it.getDrink()); 
      smokeTv.setText(it.getSmoke()); 
      locationTv.setText(it.getLocation()); 
      QualificationTv.setText(it.getQualification()); 
      AnnualIncomeTv.setText(it.getAnnualIncome()); 
      picCountTv.setText(it.getPicCount()); 

      //String urll="http://ste.india.com/sites/default/files/2015/12/18/442851-max.jpg"; 
      //String urll="http://www.fashioncentral.pk/images/models/111/Sanam_Jung_Pic.jpg"; 
      imageLoader = CustomVolleyRequest.getInstance(activityy.getApplicationContext()).getImageLoader(); 
      imageLoader.get(Config.urlImage+it.getUrlPic(), ImageLoader.getImageListener(profilePicIv, R.drawable.blur, android.R.drawable.ic_dialog_alert)); 
      profilePicIv.setImageUrl(Config.urlImage+it.getUrlPic(), imageLoader); 



     } 

// пользовательские залп

public class CustomVolleyRequest { 

    private static CustomVolleyRequest customVolleyRequest; 
    private static Context context; 
    private RequestQueue requestQueue; 
    private ImageLoader imageLoader; 


    private CustomVolleyRequest(Context context) { 
     this.context = context; 
     this.requestQueue = getRequestQueue(); 

     imageLoader = new ImageLoader(requestQueue, 
       new ImageLoader.ImageCache() { 
        private final LruCache<String, Bitmap> 
          cache = new LruCache<String, Bitmap>(20); 

        @Override 
        public Bitmap getBitmap(String url) { 
         return cache.get(url); 
        } 

        @Override 
        public void putBitmap(String url, Bitmap bitmap) { 
         cache.put(url, bitmap); 
        } 
       }); 
    } 

    public static synchronized CustomVolleyRequest getInstance(Context context) { 
     if (customVolleyRequest == null) { 
      customVolleyRequest = new CustomVolleyRequest(context); 
     } 
     return customVolleyRequest; 
    } 

    public RequestQueue getRequestQueue() { 
     if (requestQueue == null) { 
      Cache cache = new DiskBasedCache(context.getCacheDir(), 10 * 1024 * 1024); 
      Network network = new BasicNetwork(new HurlStack()); 
      requestQueue = new RequestQueue(cache, network); 
      requestQueue.start(); 
     } 
     return requestQueue; 
    } 

    public ImageLoader getImageLoader() { 
     return imageLoader; 
    } 

} 

// прописной буквы

public class CapitalLetter { 
    public static String AllFirstLetterWithBlanckSpace(String str) { 
     String[] strArray = str.split(" "); 
     StringBuilder builder = new StringBuilder(); 
     for (String s : strArray) { 
      String cap = s.substring(0, 1).toUpperCase() + s.substring(1); 
      builder.append(cap + " "); 
     } 


     return builder.toString(); 
    } 


     public static String FirstLetter(String str) { 
      String[] strArray = str.split(" "); 
      StringBuilder builder = new StringBuilder(); 
      for (String s : strArray) { 
       String cap = s.substring(0, 1).toUpperCase() + s.substring(1); 
       builder.append(cap + ""); 
      } 


      return builder.toString(); 
     } 

     public static String Peragrap(String str) { 
      String[] strArray = str.split("."); 
      StringBuilder builder = new StringBuilder(); 
      for (String s : strArray) { 
       String cap = s.substring(0, 1).toUpperCase() + s.substring(1); 
       builder.append(cap + "."); 
      } 


      return builder.toString(); 
     } 
    } 

// base64 кодирование расшифровывает

public class Basee64 { 


    public static String Decode(String s) { 

     String data=null; 
     if(s!=null) { 
      try { 
       data = new String(Base64.decode(s, Base64.DEFAULT), "UTF-8").trim(); 
      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } 
     } 
     return data; 
    } 

    public static String Encode(String s) { 

     String data=null; 

     if(s!=null) { 
      try { 
       data = Base64.encodeToString(s.getBytes("UTF-8"), Base64.DEFAULT).trim(); 
      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } 
     } 
     return data; 
    } 




    public static String Decode2(String s) { 
      String data=null; 
      if(s!=null) { 
       try { 
        data = new String(Base64.decode(new String(Base64.decode(s, Base64.DEFAULT), "UTF-8"), Base64.DEFAULT), "UTF-8").trim(); 
       } catch (UnsupportedEncodingException e) { 
        e.printStackTrace(); 
       } 
      } 
      return data; 
     } 

     public static String Encode2(String s) { 
      String data=null; 

      if(s!=null) { 
       try { 
        data = Base64.encodeToString(Base64.encodeToString(s.getBytes("UTF-8"), Base64.DEFAULT).trim().getBytes("UTF-8"), Base64.DEFAULT).trim(); 
       } catch (UnsupportedEncodingException e) { 
        e.printStackTrace(); 
       } 
      } 
      return data; 
     } 
    } 
+0

Вы работаете с изображениями? Поместите некоторый код. –

+0

Да, я работаю с изображениями и строкой. –

+0

Ожидаете ли вы, что мы полностью работаем с кодом, просто чтобы определить проблему, которая показывает * некоторые устройства *? Вы отлаживали приложение устройства, с которым вы столкнулись? Вы изолировали заявления, которые вызывают зависание? –

ответ

0

попробуйте использовать

 Runtime.getRuntime().maxMemory(); 

, где ваш код застревания becauase некоторых телефонов автоматически очистить вратаря оперативной памяти, но ваше приложение нужно больше памяти через Таким образом, вы можете назначить больше памяти для вашей работы. Для того, чтобы очистить использование памяти ниже

System.runFinalization(); 
    Runtime.getRuntime().gc(); 
    System.gc(); 

// очистить ЗУ

+0

по-прежнему та же проблема здесь ... –

+0

для изображений, которые вы используете? –

+0

Я использую залп для изображений и табуров и массивов для извлечения данных. –

0

выше ответ велик. Но с точки зрения программирования вы должны сделать что-то большее, чем потоки, обработчик сервиса. Если вы кодируете все в основном потоке, он будет зависать, пока процесс не завершится. Но поставьте не-ui вещи в фоновый поток или async-задачу.

+0

- концепция нарезки, применяемая к волейболу? –

+0

Волейбол встроен с резьбой – Godwin

+0

, так что нет необходимости в обслуживании нитей сервис в залпе справа? –

0

Если приложение замерзает достаточно долго, чтобы получить приложение не отвечает (ANR) всплывающее окно, то вы можете вытащить файл traces.txt, чтобы увидеть то, что происходит:

adb pull /data/anr/traces.txt

Этот файл будет содержать дамп потока вашего приложения. Посмотрите, что делает основной поток. Это будет намек на то, что должно быть помещено в фоновый поток.

0

Насколько велик ответ? Раздувание json не из дешевых, если ваш json очень большой, это означает, что приложение может занять некоторое время, чтобы создать соответствующие объекты для представления вашего json. Если это причина, попробуйте раздуть json, используя JsonReader.