
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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)