imageView에 setImageBitmap()
을 호출하면 UI가 지연됩니다. 그리고 listView을 사용하고 있으므로 스크롤하는 동안 imageView를 설정해야합니다. Picasa 또는 다른 이미지 다운로드 도우미를 사용하여 문제를 다운로드하는 것과 관련이 없으며 그러한 종류의 라이브러리를 사용하는 데 도움이되지 않기 때문에 제안하지 마십시오.setImageBitmap() lags UI
편집 :
어댑터 :
public class GönderiItemAdapter extends BaseAdapter{
private final Activity mActivity;
private final Vector<String> mVeri;
private boolean mProfil = false;
private boolean mKullanıcı;
private boolean mArama = false;
private Profil mProfilBilgi;
private String mAramaString;
public GönderiItemAdapter(Activity pActivity, String[] pVeri, boolean pKullanıcı, Profil pProfililgi){
this(pActivity, pVeri);
mProfil = true;
mKullanıcı = pKullanıcı;
mProfilBilgi = pProfililgi;
}
public GönderiItemAdapter(Activity pActivity, final String[] pVeri, String pAramaString){
this(pActivity, pVeri);
mAramaString = pAramaString;
mArama = true;
}
public GönderiItemAdapter(Activity pActivity, final String[] pVeri){
if(Ayarlar.sGönderiler == null)
Ayarlar.yükleGönderiler(pActivity);
mActivity = pActivity;
mVeri = new Vector<String>();
for(int i = 0; i < pVeri.length; ++i)
mVeri.add(pVeri[ i ]);
mProfil = false;
}
public void ekleÜst(String[] pVeri){
for(int i = pVeri.length - 1; i >= 0; --i){
Gönderi gönderi = Ayarlar.alGönderi(pVeri[ i ], mActivity, false);
if(!gönderi.mGönderenId.equals("-1"))
mVeri.add(0 , pVeri[ i ]);
}
}
public void ekleAlt(String[] pVeri, final TextView pMetin){
for(int i = 0; i < pVeri.length; ++i){
Gönderi gönderi = Ayarlar.alGönderi(pVeri[ i ], mActivity, false);
if(gönderi.mGönderenId.equals("-1"))
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
pMetin.setText(R.string.dahayok);
}
});
else
mVeri.add(pVeri[ i ]);
}
}
public void al(){
GenelEşzamansızİşlem giş = new GenelEşzamansızİşlem();
giş.arkaplanİşlem = new Thread(new Runnable() {
@Override
public void run() {
for(int i = 0; i < mVeri.size(); ++i)
Ayarlar.alGönderi(mVeri.get(i), mActivity, false);
}
});
if(Araçlar.mobilVeri(mActivity))
giş.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
else
giş.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
static public void al2(final String[] pVeri, final Activity pActivity){
GenelEşzamansızİşlem giş = new GenelEşzamansızİşlem();
giş.arkaplanİşlem = new Thread(new Runnable() {
@Override
public void run() {
if(Ayarlar.sGönderiler == null)
Ayarlar.yükleGönderiler(pActivity);
Vector<String> idVector = new Vector<String>();
for(int i = 0; i < pVeri.length; ++i)
if(!Ayarlar.sGönderiler.containsKey(pVeri[i]))
idVector.add(pVeri[i]);
String[] idArray = new String[ idVector.size() ];
for(int i = 0; i < idArray.length; ++i)
idArray[ i ] = idVector.get(i);
if(idArray.length > 0)
Ayarlar.alTopluGönderi(idArray, pActivity);
}
});
try{
giş.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR).get();
}catch(Exception e){
e.printStackTrace();
}
}
public void güncelle(){
for(int i = 0; i < mVeri.size(); ++i){
Ayarlar.alGönderi(mVeri.get(i), mActivity, false).güncelle(mActivity);
}
}
@Override
public int getCount(){
if(mProfil)
return mVeri.size() + 1;
return mVeri.size();
}
@Override
public int getViewTypeCount(){
return 2;
}
@Override
public Object getItem(int arg0) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position){
if(mProfil && position == 0)
return 1;
else
return 0;
}
@Override
public boolean areAllItemsEnabled(){
return false;
}
@Override
public boolean isEnabled(int position){
return false;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater inflater = (LayoutInflater) mActivity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(mProfil && position == 0)
{
View v = inflater.inflate(R.layout.header_profil, null);
final Button sağ = (Button) v.findViewById(R.id.sag );
View line1 = v.findViewById(R.id.line1);
final Button orta = (Button) v.findViewById(R.id.orta);
View line2 = v.findViewById(R.id.line2);
final Button sol = (Button) v.findViewById(R.id.sol );
if(mKullanıcı){
sağ.setVisibility(View.VISIBLE);
sağ.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
((ExplorerActivity)mActivity).yeniGönderi();
}
});
sağ.setText(R.string.yeniGonderi);
}
else{
sağ.setVisibility(View.GONE);
line2.setVisibility(View.GONE);
if(!Ayarlar.sFavoriler.contains(mProfilBilgi.mID))
sol.setText(R.string.favoriEkle);
else
sol.setText(R.string.favoriCikar);
sol.setVisibility(View.VISIBLE);
sol.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
((ExplorerActivity)mActivity).favori(mProfilBilgi.mID);
if(!Ayarlar.sFavoriler.contains(mProfilBilgi.mID))
sol.setText(R.string.favoriEkle);
else
sol.setText(R.string.favoriCikar);
}
});
}
v.findViewById(R.id.profil).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
((ExplorerActivity)mActivity).gösterProfil(mProfilBilgi);
}
});
return v;
}
else{
if(mProfil)
position -= 1;
View v;
Gönderi g;
if(convertView == null){
v = inflater.inflate(R.layout.gonderi_liste_nesnesi, null);
g = new Gönderi();
g.mAnaDüzen = (LinearLayout) v;
g.mProfilFotoğrafı = (CircularImageView) v.findViewById(R.id.profil_photo);
g.mGönderenAdı = (TextView) v.findViewById(R.id.gonderen_adi);
g.mGönderiZamanı = (TextView) v.findViewById(R.id.gonderi_tarihi);
g.mDönem = (TextView) v.findViewById(R.id.gonderen_donemi);
g.mGönderi = (TextView) v.findViewById(R.id.gonderi);
g.mBeğen = (TextView) v.findViewById(R.id.begen);
g.mBeğeniText = (TextView) v.findViewById(R.id.begeniSayi);
v.setTag(g);
}
else{
g = (Gönderi) convertView.getTag();
v = convertView;
}
final Gönderi gönderi = Ayarlar.alGönderi(mVeri.get(position), mActivity, false);
g.mGönderenAdıString = gönderi.mGönderenAdıString;
g.mDüzenliTarih = gönderi.mDüzenliTarih;
g.mDönemString = gönderi.mDönemString;
g.mGönderiHamMetin = gönderi.mGönderiHamMetin;
g.mBeğeniTextString = gönderi.mBeğeniTextString;
g.mBeğeni = gönderi.mBeğeni;
g.mBeğenildi = gönderi.mBeğenildi;
g.mBeğeniVerisi = gönderi.mBeğeniVerisi;
g.mGönderenId = gönderi.mGönderenId;
g.mBeğeniSayısı = gönderi.mBeğeniSayısı;
g.mGönderiId = gönderi.mGönderiId;
g.ayarla(mArama, mAramaString, mActivity);
if(!mArama){
g.beğeniİşlemler(mActivity);
if(g.mBeğenildi){
g.mBeğen.setOnClickListener(g.mBeğenmeİşlem);
g.mBeğen.setText(R.string.hoslanma);
}
else
g.mBeğen.setOnClickListener(g.mBeğenİşlem);
final Gönderi foo = g;
g.mBeğeniText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
final Dialog dialog = new Dialog(mActivity);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.dialog_begeni);
ListView liste = (ListView) dialog.findViewById(R.id.liste);
Vector<Profil> profiller = new Vector<Profil>();
for(int i = 0; i < foo.mBeğeni.size(); ++i){
Profil p = Ayarlar.alProfil(foo.mBeğeni.get(i).mGönderenID , mActivity);
Log.w("id" , p.mID);
if(p != null && !p.mID.equals(Ayarlar.sMevcutId))
profiller.add(p);
}
KartAdapter adapter = new KartAdapter(mActivity, profiller, mActivity, dialog);
liste.setAdapter(adapter);
if(profiller.size() != 0)
dialog.show();
}
});
g.mProfilFotoğrafı.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
((ExplorerActivity) mActivity).açProfil(gönderi.mGönderenId);
}
});
g.mGönderenAdı.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
((ExplorerActivity) mActivity).açProfil(gönderi.mGönderenId);
}
});
}
else{
g.mAnaDüzen.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
((ExplorerActivity) mActivity).açGönderi(gönderi.mGönderiId);
}
});
}
return v;
}
}
}
이미지가 재활용하려는 메모리를 차지하므로 가비지 수집기가 시작될 가능성이 큽니다. 비트 맵의 특성 (크기, 원점, 각 목록 항목마다 다른지 여부 등)에 대한 정보를 제공하지 않으면 질문에 대한 답변이 없습니다. –
그들은 서버에서 다른 크기로 각 항목에 대해 다른로드 된 있지만 리소스에서 setdrawable 경우 문제가되지 않습니다. – Senhor
ListView 사용하고 있기 때문에 나는 당신이 그것에 어떤 종류의 축소판이 있다고 가정합니다. 그리고 거기에 배치하기 위해 큰 비트 맵을로드하고 있습니다 (샘플 크기가 아님). 그러나이 작업을 수행하는 코드가 없으면 어떤 권장 사항도 제시 할 수 없습니다. Bitmap을 얻는 방법과 ImageView로 전달하는 방법을 코드로 게시 할 수 있습니까? 또한 ListView Adapter를 게시하는 경우에도 유용합니다. – Chaosit