2011-09-07 82 views
3

AM使用AsyncTask从服务检索数据。但它需要太多的时间,即约2分钟左右..AsyncTask需要很长时间才能启动Android

我发现,当我开始asynctask对话框显示,但后台进程需要时间来响应和获取数据。

检查的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 

感谢

+0

你在关闭对话框后执行?,只是问,因为我没有看到你在发布的代码 –

+0

dlg.dismiss()是关闭对话框的代码.. – Udaykiran

回答

3

这是很难从你的代码看它为什么这么慢知道为什么。我相信,最好的猜测是你会做两个Web请求(一次是获取图像)。这可能是因为你的服务速度很慢。

您在上面发布的日志行意味着您正在分配内存。如果你正在做一些内存密集的事情,你可以期望看到很多。

也有可能你有很多其他线程正在进行,AsyncTask线程的优先级比其他线程低,然后基本上被它们阻塞。尝试提高优先级(不知道该怎么做)或仔细查看代码中的其他线程。

+0

是的东西提取图像正在时间..你可以建议任何更好的方式来处理这个图像抓取和webservice – Udaykiran

+0

你可以检查你的线程是否正在等待Android开发工作室/调试/线程 – Awi

相关问题