Долгая загрузка екрана.

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
Ответить
Alibard
Сообщения: 70
Зарегистрирован: 20 янв 2015, 19:48

Долгая загрузка екрана.

Сообщение Alibard » 22 май 2015, 01:07

Есть преложение. С 10 екранами. При переходе на некоторьі период загрузки очень блинньій( прока грузитса ченьій екран). Как можна ето исправить? или хотябьі зделать чтоб верхняя шапка загрузилась а остальное постипенно подгружалось?
Вот код екрана которьй дольше всего грузитса.

Код: Выделить всё

package com.example.bomba;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;

import com.squareup.picasso.Picasso;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;

public class Galery extends Activity{
	ImageView qq;
	Picasso pic;
	static ImageAapter adapter;

	private Context context;	
		public static final String[] imagesUrls = {
			"http://bomba.vn.ua/sites/default/files/styles/200x200/public/_dsc0072.jpg?itok=ORAFJotr",
			"http://bomba.vn.ua/sites/default/files/styles/200x200/public/_dsc0104.jpg?itok=Peitxl1w",
			
		};
		
		final String LOG_TAG = "myLogs";
		ListView mLvImages;
		ImageView img;
		Button btn;
		@Override
		protected void onCreate(Bundle savedInstanceState) {
			super.onCreate(savedInstanceState);
			setContentView(R.layout.galery);
		    mLvImages = (ListView) findViewById(R.id.lvImages);
		    img =(ImageView)findViewById(R.id.bigimg);
		    img.setVisibility(View.INVISIBLE);
		    adapter =null;
		    String[] str = null;
		    Intent intent = getIntent();
			 String dbqeru = intent.getStringExtra("dbqeru");
			 MyTask mt = new MyTask();
		     mt.execute(dbqeru);
		     try {
				 str= mt.get();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ExecutionException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		    
			 if (str != null) {
				 ImageAapter adapter = new ImageAapter(this, str);
			      mLvImages.setAdapter(adapter);
				
			      
			    }
			 
			 mLvImages.setOnItemClickListener(new OnItemClickListener() {
			   

				@Override
				public void onItemClick(AdapterView<?> parent, View view,
						int position, long id) {
					img.setVisibility(View.VISIBLE);
					mLvImages.setVisibility(View.INVISIBLE);
					pic.with(context).load(imagesUrls[position]).into(img);
				
					 Log.d(LOG_TAG, "itemClick: position = " + position + ", id = "
					            + id);
					 Log.d(LOG_TAG, imagesUrls[position]); 
					}
			 });
			 img.setOnClickListener(new OnClickListener() {
					@Override
					public void onClick(View v) {
						img.setVisibility(View.INVISIBLE);
						mLvImages.setVisibility(View.VISIBLE);
					}
				});
			
		}


	class ImageAapter extends ArrayAdapter<String> {

	    LayoutInflater mInflater;
	    Picasso mPicasso;
	    
	    public ImageAapter(Context context, String[] imagesurls) {
	    	super(context, R.layout.list_item, imagesurls);
		      mInflater = LayoutInflater.from(context); 
		      mPicasso = Picasso.with(context);
		    }
	    @Override
	    public View getView(int position, View convertView, ViewGroup parent) {
	      View view = convertView;
	      if (view == null) {
	        view = mInflater.inflate(R.layout.list_item, parent, false);
	      }
	      ImageView imageView = (ImageView) view.findViewById(R.id.imageView);
	      mPicasso.load(getItem(position)).resizeDimen(R.dimen.image_size, R.dimen.image_size). centerInside().into(imageView);
	      return view;
	      
	    }
	   
	}

	}
class MyTask extends AsyncTask<String, Void, String[]> {
	 final String LOG_TAG = "myLogs";
 @Override
 protected void onPreExecute() {
   super.onPreExecute();
  
 }

 protected String[] doInBackground(String... params) {
	String[] photo_arr = null;
   try {
     TimeUnit.SECONDS.sleep(1);
     try { 
         
         Class.forName("com.mysql.jdbc.Driver"); 
         Log.d(LOG_TAG, "--- Driver is conected!!! ---"); 
     } catch (ClassNotFoundException e) { 
         Log.d(LOG_TAG, "--- Driver is NOT conected!!! ---"); 
         Log.d(LOG_TAG,e.toString()); 
         e.printStackTrace(); 
         return null; 
     } 
     Connection conn = null; 
    
     
      
     String url1 = "jdbc:mysql://sql5.freesqldatabase.com:3306/sql578111"; 
    String name = "sql578111"; 
     String password = "vH3!fG9%"; 
     int i=0;
    String ss;
     try { 
         conn = DriverManager.getConnection(url1, name, password); 
        // Toast.makeText(this, "есть подключение к БД", Toast.LENGTH_SHORT).show(); 
         Statement stmt = conn.createStatement();
         ResultSet rs = stmt.executeQuery("SELECT big FROM photo_travhol");
        rs.next();
        ss=rs.getString("big");
        photo_arr[0]=ss;
        Log.d(LOG_TAG,rs.getString("big"));
         Log.d(LOG_TAG,"есть подключение к БД");      
       //  while(rs.next()){
       // 	 photo_arr[i]=rs.getString("big");
       // 	 i++;
     //    }
       //  rs.next();
    	// photo_arr[i]=rs.getString("big");
       // Log.d(LOG_TAG,rs.getString("big"));
         Log.d(LOG_TAG,"есть подключение к БД"); 
        
     } catch (java.sql.SQLException e) { 
          
         Log.d(LOG_TAG,e.toString()); 
       //  Toast.makeText(this, "ошибка подключения к БД", Toast.LENGTH_SHORT).show(); 
         Log.d(LOG_TAG,"ошибка подключения к БД");
     } 

     if (conn == null) { 
       //  Toast.makeText(this, "нет данных БД", Toast.LENGTH_SHORT).show(); 
     	 Log.d(LOG_TAG,"нет данных БД");
     } else { 
      //   Toast.makeText(this, "есть данные!", Toast.LENGTH_SHORT).show(); 
     	 Log.d(LOG_TAG,"есть данные!");
     } 
     
     
   } catch (InterruptedException e) {
     e.printStackTrace();
   }
   
return photo_arr;
 }

 @Override
 protected void onPostExecute(String[] result) {
   super.onPostExecute(result);
  
 }


}


Alibard
Сообщения: 70
Зарегистрирован: 20 янв 2015, 19:48

Re: Долгая загрузка екрана.

Сообщение Alibard » 23 май 2015, 13:37

Нет вариантов как поправить?

Dark67
Сообщения: 72
Зарегистрирован: 23 июл 2012, 23:11

Re: Долгая загрузка екрана.

Сообщение Dark67 » 24 май 2015, 14:01

Ты всю логику впихнул в onCreate(). Теперь система ждет выполнения этого метода и только после этого загрузит итоговое View.
Поэтому инициализируй все необходимые View, получи на них ссылки, а в AsyncTask в методе onPostExecute() установи загруженную картинку на свое место.

Ответить