我有一个标签布局应用,需要在启动时立即下载几个文件,因此在onCreate方法的Main.java文件中我调用:
myProgressDialog = ProgressDialog.show(Controller.this,
"Please wait...", "Doing Extreme Calculations...", true);
downloadFile(NAME_LOCAL, NAME_SERVER, true);
downloadFile是一个单独的线程,它看起来像这样:
protected void downloadFile(final String localFilePath, final String remoteFileName, final boolean ASCII) {
// Fire off a thread to do some work that we shouldn't do directly in the UI thread
Thread a = new Thread() {
public void run() {
Logger.setLevel(Level.DEBUG);
try{
//create client
log.info("Creating Client");
ftp = new FileTransferClient();
log.info("Setting Remote Host");
ftp.setRemoteHost(host);
ftp.setUserName(username);
ftp.setPassword(password);
//connect. . .We hope
log.info("Connecting to server " + host);
ftp.connect();
ftp.getAdvancedFTPSettings().setConnectMode(FTPConnectMode.PASV);
if(ASCII){
ftp.setContentType(FTPTransferType.ASCII);
Log.d("ASCII", "USING ASCII");
}else if(!ASCII){
Log.d("BINARY", "USING BINARY");
ftp.setContentType(FTPTransferType.BINARY);
}
ftp.downloadFile(cache + localFilePath , remoteFileName);
}catch (Exception e){
e.printStackTrace();
}
mHandler.post(mUpdateResults);
Handler handler=new Handler();
handler.post(new Runnable(){public void run(){myProgressDialog.dismiss();}});
}
};
a.start();
}
在log cat中它开始下载,它结束然后突然它给了我这个:
02-17 17:27:51.175: ERROR/WindowManager(2523): Activity org.IRE.toolbox.Controller has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@46eba2f0 that was originally added here
02-17 17:27:51.175: ERROR/WindowManager(2523): android.view.WindowLeaked: Activity org.IRE.toolbox.Controller has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@46eba2f0 that was originally added here
怎么回事?! 提前谢谢!
答案 0 :(得分:1)
发布的代码将在Thread.run()
at:
Handler handler=new Handler();
原因是线程没有调用Looper.prepare
。您可能看到了“强制关闭”提示,如果您浏览日志,您可能会发现类似的内容:
ERROR/AndroidRuntime(1161): Uncaught handler: thread Thread-9 exiting due to uncaught exception
ERROR/AndroidRuntime(1161): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
ERROR/AndroidRuntime(1161): at android.os.Handler.<init>(Handler.java:121)