2011-09-07 4 views
3

AM en utilisant AsyncTask pour récupérer des données à partir de services. J'ai découvert que, lorsque je lance l'asynctask, la boîte de dialogue montre mais le processus d'arrière-plan prend du temps pour répondre et obtenir des données.AsyncTask prenant beaucoup de temps pour démarrer Android

Vérifiez mon code de 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)); 





       } 

     } 

Est-il possible de réduire le temps. parce que c'est trop de temps.

et un plus:

bfore il commence: ce ci-dessous les types de lignes sont à venir.

GC_FOR_MALLOC freed 31921 objects/2006888 bytes in 100ms 

Merci

+0

est-ce que vous fermez la boîte de dialogue en post exécuter?, Juste demander, parce que je ne vois pas dans le code que vous avez posté –

+0

dlg.dismiss() est le code pour la fermeture du dialogue .. – Udaykiran

Répondre

3

Il est difficile de dire pourquoi de regarder votre code pourquoi il est si lent. La meilleure supposition serait que vous êtes, je crois, en train de faire deux requêtes Web (dont une fois est de récupérer une image). Il se pourrait que vos services soient très lents.

Les lignes de journal que vous avez indiquées ci-dessus signifient que vous allouez de la mémoire. Si vous faites quelque chose de la mémoire intensive, vous pouvez vous attendre à en voir beaucoup.

Il est également possible que vous ayez beaucoup d'autres threads en cours et que le thread AsyncTask ait une priorité inférieure à celle des autres threads et qu'il soit ensuite pratiquement bloqué par eux. Essayez d'augmenter sa priorité (aucune idée de comment faire) ou regardez attentivement les autres threads dans votre code.

+0

Ouais la chose récupérer l'image prend temps .. pouvez-vous suggérer une meilleure façon de gérer cette image de récupération et webservice – Udaykiran

+0

Vous pouvez vérifier si votre thread attend sur Android Developer Studio/Debug/Threads – Awi

Questions connexes