herhangi bir cevap çok takdir edilecektir.2 AsyncTasks Döngüleri Nasıl?
Yükleme hızını ölçen ve yükleme hızını ölçen biri olan iki AsyncTasks var. Uygulamanın, kullanıcı duruncaya kadar indirme ve yükleme hızlarını sürekli olarak ölçmesini istiyorum. Sonra
togglebutton = (ToggleButton) findViewById(R.id.toggleButton);
togglebutton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
while (isChecked) {
new Download.execute();
new Upload.execute();
}
} else {
// The toggle is disabled
}
}
});
Ben geçiş düğmesi, uygulama donuyor tıklayın
ve çöküyor: Şu an, çünkü OutOfMemoryError ait sonlandırılıyorsa bir geçiş düğmesi vardır. Asynctasks'ımın birden çok örneğini oluşturmanın problemin sebebi olduğunu varsayıyorum. Bunu uygulamak için daha iyi bir yolu var mı?Not: Ben Asynctasks izleyen bir tarzda çalıştırmak için gerektiğinden çalışacak doInBackground içinde döngü sanmıyorum, yani Download.execute, Upload.execute, Download.execute, Upload.execute ...
onay kutusu ilk kez denetlenirif (isChecked) {
while (isChecked) {
new Download.execute();
new Upload.execute();
}
} else {
// The toggle is disabled
}
, bir sonsuz döngüye giriyoruz:
03-25 23:31:36.261 15881-15888/com.kingrandesigns.uploadpicturetutorial E/art: Throwing OutOfMemoryError "Failed to allocate a 28 byte allocation with 0 free bytes and 3GB until OOM" (recursive case)
03-25 23:31:36.261 15881-15881/com.kingrandesigns.uploadpicturetutorial I/art: Alloc sticky concurrent mark sweep GC freed 0(0B) AllocSpace objects, 0(0B) LOS objects, 0% free, 128MB/128MB, paused 25.421ms total 29.582ms
03-25 23:31:36.261 15881-15894/com.kingrandesigns.uploadpicturetutorial I/art: WaitForGcToComplete blocked for 29.847ms for cause Background
03-25 23:31:36.261 15881-16557/com.kingrandesigns.uploadpicturetutorial I/art: WaitForGcToComplete blocked for 877.665ms for cause Alloc
03-25 23:31:36.271 15881-15888/com.kingrandesigns.uploadpicturetutorial E/art: "JDWP" daemon prio=5 tid=3 Runnable
03-25 23:31:36.271 15881-15888/com.kingrandesigns.uploadpicturetutorial E/art: | group="system" sCount=0 dsCount=0 obj=0x12c5f080 self=0xaf20e400
03-25 23:31:36.271 15881-15888/com.kingrandesigns.uploadpicturetutorial E/art: | sysTid=15888 nice=0 cgrp=apps sched=0/0 handle=0xb4922200
03-25 23:31:36.271 15881-15888/com.kingrandesigns.uploadpicturetutorial E/art: | state=R schedstat=(2731136812 186756673 920) utm=267 stm=6 core=0 HZ=100
03-25 23:31:36.271 15881-15888/com.kingrandesigns.uploadpicturetutorial E/art: | stack=0xb4366000-0xb4368000 stackSize=1012KB
03-25 23:31:36.271 15881-15888/com.kingrandesigns.uploadpicturetutorial E/art: | held mutexes= "mutator lock"(shared held)
03-25 23:31:36.271 15881-15888/com.kingrandesigns.uploadpicturetutorial E/art: at java.nio.ByteBuffer.wrap(ByteBuffer.java:113)
03-25 23:31:36.271 15881-15888/com.kingrandesigns.uploadpicturetutorial E/art: at org.apache.harmony.dalvik.ddmc.ChunkHandler.wrapChunk(ChunkHandler.java:80)
03-25 23:31:36.271 15881-15888/com.kingrandesigns.uploadpicturetutorial E/art: at android.ddm.DdmHandleHeap.handleHPIF(DdmHandleHeap.java:112)
03-25 23:31:36.271 15881-15888/com.kingrandesigns.uploadpicturetutorial E/art: at android.ddm.DdmHandleHeap.handleChunk(DdmHandleHeap.java:85)
03-25 23:31:36.271 15881-15888/com.kingrandesigns.uploadpicturetutorial E/art: at org.apache.harmony.dalvik.ddmc.DdmServer.dispatch(DdmServer.java:171)
03-25 23:31:36.271 15881-15888/com.kingrandesigns.uploadpicturetutorial I/art: Exception thrown by dispatcher for 0x48504946
Bu mantıklı. Bunu uygulamak için alternatif bir fikrin var mı? Kullanıcı durmak istediği zamana kadar bu uyumsuzlukları çözmenin bir yolu var mı? –
AsyncTask bunun için iyi bir araç değildir. Çalışmayı gerçekleştiren farklı thread'larla çalışan iki farklı Servis düşünün. Etkinlikle ihtiyaç duyduğunuz etkileşim miktarına bağlı olarak uygulanması önemsizdir. Yaptığınız şey kesinlikle bir android uygulaması için tipik bir durum değildir. –