AsyncTask需要很长时间才能启动Android

AsyncTask需要很长时间才能启动Android,第1张

概述AM使用AsyncTask从服务中检索数据.但要花费太多时间,即大约2分钟左右.我发现,当我启动asynctask时,会显示对话框显示,但是后台进程需要时间来响应并获取数据.检查我的asynctask代码:publicclassJamsTaskextendsAsyncTask<Void,Void,Bundle>{private

AM使用AsyncTask从服务中检索数据.但要花费太多时间,即大约2分钟左右.

我发现,当我启动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

谢谢

解决方法:

很难通过查看代码来说明为什么它这么慢.我相信,最好的猜测是您正在执行两个Web请求(其中一次正在获取图像).可能是您的服务非常慢.

您在上面发布的日志行表示您正在分配内存.如果您正在做一些占用大量内存的 *** 作,那么可能会看到很多.

也可能有很多其他线程在运行,并且AsyncTask线程的优先级比其他线程低,因此实际上被它们阻塞了.尝试提高其优先级(不知道如何做)或仔细查看代码中的其他线程.

总结

以上是内存溢出为你收集整理的AsyncTask需要很长时间才能启动Android全部内容,希望文章能够帮你解决AsyncTask需要很长时间才能启动Android所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1070221.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存