2013-04-02 2 views
0

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

MainActivity.java

public class MainActivity extends Activity { 
    private ArrayList<Data> arraydata; 
    private Data data; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Handler handler=new Handler(); 
     handler.postDelayed(new Runnable() { 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       //finish(); 
       new ShowDialogAsyncTask().execute(); 
       /*Intent i=new Intent(MainActivity.this,XMLParsingActivity.class); 
       startActivity(i);*/ 
      } 

     },3000); 
    } 
    private class ShowDialogAsyncTask extends AsyncTask<Void, Integer, Void>{ 

     int progress_status; 
     TextView txt_percentage=new TextView(MainActivity.this); 
     protected void onPreExecute() { 
       // update the UI immediately after the task is executed 
       super.onPreExecute(); 
       Toast.makeText(MainActivity.this, "Loading.....", Toast.LENGTH_LONG).show(); 

       // Intent i=new Intent(MainActivity.this,XMLParsingActivity.class); 
       //MainActivity.this.startActivity(i); 

       progress_status = 0; 
       txt_percentage.setText("downloading 0%"); 

       } 
    @Override 
    protected Void doInBackground(Void... arg0) { 
     // TODO Auto-generated method stub 
     Intent i=new Intent(MainActivity.this,XMLParsingActivity.class); 
     startActivity(i); 

      /* while(progress_status<100){ 

       progress_status += 5; 

       publishProgress(progress_status); 
       SystemClock.sleep(200); 

       }*/ 
      //Intent i=new Intent(MainActivity.this,XMLParsingActivity.class); 
      //startActivity(i); 
return null; 

    } 
    @Override 
     protected void onProgressUpdate(Integer... values) { 
     super.onProgressUpdate(values); 
     ProgressBar progressBar=new ProgressBar(MainActivity.this); 
     progressBar.setProgress(values[0]); 
     txt_percentage.setText("downloading " +values[0]+"%"); 

     } 
    @Override 
     protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     /* Toast.makeText(MainActivity.this, "Loading.....", Toast.LENGTH_LONG).show(); 
     txt_percentage.setText("download complete"); 
     Intent i=new Intent(MainActivity.this,XMLParsingActivity.class); 
     MainActivity.this.startActivity(i);*/ 

     } 

    } 

} 

С моей главной деятельности я хотел бы перейти к XMLParsingActivity и состоит из ListViews, которая состоит из данных XML, полученных с сервера. В XMLParsingActivity я использую динамическую информацию.

XMLParsingActivity.java

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.home); 
     //mCustomView = getLayoutInflater().inflate(R.layout.home, null); 

     //final ActionBar bar = getActionBar(); 
     //bar.setCustomView(mCustomView, new ActionBar.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
     //arraydata=getIntent().getParcelableExtra("ary"); 
     listview=(ListView)findViewById(R.id.lv); 
     arraydata =new ArrayList<Data>(); 
     Uri="http://vegaentertain.com/android/list.xml"; 
      // Toast.makeText(this, "Loading List.....", Toast.LENGTH_LONG).show(); 

     new ShowDialogAsyncTask().execute(); 
} 

    private class ShowDialogAsyncTask extends AsyncTask<Void, Integer, Void>{ 

      int progress_status; 
      protected void onPreExecute() { 
        // update the UI immediately after the task is executed 
        super.onPreExecute(); 
        // ProgressBar bar=new ProgressBar(XMLParsingActivity.this); 
       // bar.setVisibility(View.GONE); 
        Toast.makeText(XMLParsingActivity.this, "Loading List.....", Toast.LENGTH_LONG).show(); 
        } 
     @Override 
     protected Void doInBackground(Void... arg0) { 
      // TODO Auto-generated method stub 
      XMLParser parser=new XMLParser(); 

       String xml=parser.getXmlFromUri(Uri); 
       Document doc=parser.getDomElement(xml); 
       NodeList nodes=doc.getElementsByTagName("actress"); 

       for(int i=0;i<nodes.getLength();i++){ 
        data=new Data(); 
        Element e=(Element)nodes.item(i); 
        data.setName(parser.getValue(e,"name")); 
        data.setDate(parser.getValue(e,"date")); 
        data.setImageurl(parser.getValue(e,"image-url")); 
        arraydata.add(data); 
       } 


    return null; 

     } 
     @Override 
      protected void onProgressUpdate(Integer... values) { 
      super.onProgressUpdate(values); 



      } 
     @Override 
      protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
      listview.setAdapter(new CustomAdapter(arraydata,XMLParsingActivity.this)); 
      listview.setOnItemClickListener(new OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
         long arg3) { 
        // TODO Auto-generated method stub 
        new ShowAsyncTask(arg2).execute(); 

       } 
      }); 

      } 
     private class ShowAsyncTask extends AsyncTask<Void, Integer, Void>{ 
      int pos; 
      public ShowAsyncTask(int arg2) { 
       // TODO Auto-generated constructor stub 
       pos=arg2; 
      } 
      protected void onPreExecute() { 
        // update the UI immediately after the task is executed 
        super.onPreExecute(); 

        connectionProgressDialog = new ProgressDialog(XMLParsingActivity.this); 
        connectionProgressDialog.setCancelable(true); 
        connectionProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
        connectionProgressDialog.setMessage("Connecting to Server..."); 
        connectionProgressDialog.show(); 
        } 

      @Override 
      protected Void doInBackground(Void... params) { 
       // TODO Auto-generated method stub 

       return null; 
      } 
      protected void onProgressUpdate(Integer... values) { 
        super.onProgressUpdate(values); 
        connectionProgressDialog.dismiss(); 
        // downloadSpinnerProgressDialog.show(); 
       } 
      @Override 
      protected void onPostExecute(Void result) { 
       // TODO Auto-generated method stub 
       super.onPostExecute(result); 
       Intent i=new Intent(XMLParsingActivity.this,List.class); 
       i.putExtra("pos",pos); 
       XMLParsingActivity.this.startActivity(i); 
      } 

     } 
     } 

     } 

Может кто-нибудь дать мне предложения.

+3

Прежде всего, удалите задержку из метода onCreate, вы просто задерживаете появление заставки из-за этого. –

+0

после того, как вы удалили тот же прием в то же время –

ответ

2
  1. Нет необходимости в AsyncTask в MainActivity.java. (обратите внимание: вы не можете вызвать намерение из doInbackground из AsyncTask()). Увидев ваш код, я верю, что это просто заставка. в этом случае следует использовать следующее:

    @Override 
    protected void onStart() { 
    
    super.onStart(); 
    
    Handler handler = new Handler(); 
    
        // run a thread after 2 seconds to start the home screen 
        handler.postDelayed(new Runnable() { 
    
         @Override 
         public void run() { 
    
           //code written here will execute after 2000ms(2 seconds) 
           // write your intent to move from MainActivity.this to XMLParsingActivity.class 
    
        }, 2000); 
        } 
    } 
    
  2. Это занимает время, потому что вы назвали "новым ShowDialogAsyncTask() Execute();". в методе onCreate() класса XMLParsingActivity. Поскольку требуется отправить запрос на сервер, получить ответ, проанализировать и обновить интерфейс, очевидно, потребуется время.

  3. Что вы можете сделать, так называете AsyncTask в методе onStart(). Сначала отобразите ProgressDialog, чтобы пользователь знал, что что-то происходит. И, наконец, в onPostExecute() просто установите видимость ProgressBar в GONE и сделайте видимость содержимого VISIBLE.

+0

Конечно, требуется время, но у него было какое-то долгое время, есть возможность уменьшить время. –

+0

. Я удалил задачу async в основной деятельности. –

+0

- это живой сервер или локальный сервер. сервер? это зависит от скорости вашей сети, нагрузки на сервер для обработки запросов и всего. если он принимает такое же количество времени при использовании локального сервера, тогда вам нужно оптимизировать свой код. – SKK

Смежные вопросы