我有一个活动,一个接一个地调用一个线程10次。但是,如果网络速度较慢或加载了太多信息,则会发生强制关闭。在每个线程中添加睡眠有助于解决这个问题吗?或者还有其他方法可以解决它吗?
public void run() {
if(thread_op.equalsIgnoreCase("xml")){
readXML();
}
else if(thread_op.equalsIgnoreCase("getImg")){
getWallpaperThumb();
}
handler.sendEmptyMessage(0);
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
int count = 0;
if (!myExampleHandler.filenames.isEmpty()){
count = myExampleHandler.filenames.size();
}
count = 5;
if(thread_op.equalsIgnoreCase("xml")){
pd.dismiss();
thread_op = "getImg";
btn_more.setBackgroundResource(R.drawable.btn_more);
}
else if(thread_op.equalsIgnoreCase("getImg")){
setWallpaperThumb();
index++;
if (index < count){
Thread thread = new Thread(GalleryWallpapers.this);
thread.start();
}
}
}
};
答案 0 :(得分:1)
第一步应该是检查堆栈跟踪,这将给出违规行和原因。您可以使用Logcat。
答案 1 :(得分:0)
您是否收到应用程序未响应对话框(ANR)或您的应用程序是否已关闭?
当UI循环线程从呼叫返回时间过长时,会出现ANR。只要handleMessage函数及时返回,有10个或100个线程不会导致任何问题。
如果你真的想限制一次运行应该运行的线程数,请查看ExecutorService
ExecutorService executorService = Executors.newFixedThreadPool(5);
executorService.submit(new Runnable() {
public void run() {
// This is your thread
}
});
您可以将所有10个作业提交给执行者服务,它们将一个接一个地运行,最多同时运行5个。