AsyncTask занимает много времени, чтобы запустить Android - PullRequest
3 голосов
/ 07 сентября 2011

AM, используя AsyncTask для извлечения данных из сервисов.но это заняло слишком много времени, т. е. около 2 минут или около того ..

Я обнаружил, что, когда я запускаю асинхронную задачу, отображается диалоговое окно, но фоновый процесс требует времени для ответа и получения данных.

Проверьте мой код asynctask:

 public class JamsTask extends AsyncTask<Void,Void,Bundle> 
     { 


            private Context ctx; 
            ProgressDialog dlg;
            Bitmap userImage;
            String message ;

            public JamsTask(Context context) { 
                ctx = context; 
            } 

            @Override 
            protected void onPreExecute() { 
                //super.onPreExecute(); 
           try{
                dlg = new ProgressDialog(Jams.this); 
                dlg.setMessage("Please wait...."); 
                dlg.show();
           }catch (Exception e) {
            // TODO: handle exception
        }


                //setContentView(R.layout.splash);
            } 


            @Override
            protected Bundle doInBackground(Void... params) {
                   Bundle b=new Bundle();



                try{

                 SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);



                 request.addProperty("fkPersonId", Integer.valueOf(JujamaMain.userValues.get(0)));
                 request.addProperty("fkConferenceId", Integer.valueOf(JujamaMain.userValues.get(4)));
                 request.addProperty("startIndex",1);
                 request.addProperty("endIndex",20);



                   SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                   envelope.dotNet=true;
                   envelope.setOutputSoapObject(request);

                   HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

                   androidHttpTransport.call(SOAP_ACTION, envelope);

                   Object result= envelope.getResponse(); 

                   SoapObject response=(SoapObject)envelope.bodyIn;



                  strRes = result.toString();





                  SoapObject returnObj = (SoapObject)response.getProperty("GetAllStatusUpdatesResult");

                  SoapObject object=(SoapObject) returnObj.getProperty(1);


                  SoapObject returnObj2 = (SoapObject)object.getProperty("NewDataSet");



                 // Integer id = Integer.valueOf(returnObj.getPropertySafelyAsString("id");


                  for(int i=0;i<returnObj2.getPropertyCount();i++) {
                      SoapObject persondetails = (SoapObject)returnObj2.getProperty(i);



                      String salution = (String)persondetails.getPropertySafelyAsString("Salutation","");
                      //String companyname = (String)persondetails.getPropertySafelyAsString("CompanyName");
                      String firstname = (String)persondetails.getPropertySafelyAsString("FirstName","");

                      String lastname = (String)persondetails.getPropertySafelyAsString("LastName","");



                     if(!persondetails.getPropertySafelyAsString("Message","").contains("anyType"))
                        message = (String)persondetails.getPropertySafelyAsString("Message","");
                     else
                         message=""
;                     
                      String nameID = (String)persondetails.getPropertySafelyAsString("PKStatusID","");




                      String fkconfid = (String)persondetails.getPropertySafelyAsString("FKConferenceID","");





                  try{   

                     SimpleDateFormat form = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
                      java.util.Date date = null;
                      String sub=commented.substring(0, 19);

                       date = form.parse(sub);


                      SimpleDateFormat postFormater =new SimpleDateFormat("MMMMM dd, yyyy, HH:mm");
                      String newDateStr = postFormater.format(date);

                      mTimedifference.add(newDateStr);


                   /* DateTime myBirthDate = new DateTime(year,month, day, hour, minute, 0, 0);
                      DateTime now = new DateTime();
                      Period period = new Period(myBirthDate, now);

                      PeriodFormatter formatter = new PeriodFormatterBuilder()
                          .appendYears().appendSuffix(" years, ")
                          .appendMonths().appendSuffix(" months, ")
                          .appendWeeks().appendSuffix(" weeks, ")
                          .appendDays().appendSuffix(" days, ")
                          .appendHours().appendSuffix(" hours, ")
                          .appendMinutes().appendSuffix(" minutes, ")

                          .printZeroNever()
                          .toFormatter();

                      String elapsed = formatter.print(period);
                      System.out.println(elapsed + " ago");*/

                  }catch (Exception e) {
                    // TODO: handle exception
                      e.printStackTrace();

                }

                     // System.out.println(".."+"dat"+now+"..."+time);
                      mNameID.add(nameID);


                      String ImageUrl = (String)persondetails.getPropertySafelyAsString("PhotoGuid","");

                      String liked = (String)persondetails.getPropertySafelyAsString("Liked","No");
                      String nocomments = (String)persondetails.getPropertySafelyAsString("NoofComments","0");

                      mName.add(firstname.toString()+lastname.toString()+salution.toString());
                      mMessages.add(message.toString());
                      mLikesCount.add(likescount.toString());



                         mLikeText.add(liked);
                         mNoComments.add(nocomments);




                         userImage=getBitmapFromURL("http://test.jujama.com/uploadfiles/"+ImageUrl);

                      Bitmap bmp=BitmapFactory.decodeResource(getResources(),R.drawable.nophoto);

                      if(userImage==null)
                             mUserImage.add(bmp);
                         else
                          mUserImage.add(userImage);


                  }




                } catch (Exception e) {
                    e.printStackTrace();

                }

                return b;
            }    





              @Override 
                protected void onPostExecute(Bundle b) { 

                 dlg.dismiss(); 

                 lv.setAdapter(new Viewadapter(Jams.this));





              }

         } 

Есть ли способ сократить время.потому что это слишком много времени.

и еще один:

до того, как это начнется: наступают следующие типы линий.

 GC_FOR_MALLOC freed 31921 objects / 2006888 bytes in 100ms

Спасибо

1 Ответ

3 голосов
/ 07 сентября 2011

Трудно сказать, почему, глядя на ваш код, почему он такой медленный.Я полагаю, что вы, вероятно, делаете два веб-запроса (один из которых - получение изображения).Возможно, ваши службы работают очень медленно.

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

Также возможно, что у вас много других потоков, и поток AsyncTask имеет более низкий приоритет, чем другие потоки, и затемпо существу заблокированы ими.Попробуйте повысить его приоритет (не знаю, как это сделать) или внимательно посмотрите на другие потоки в вашем коде.

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