但是加到自己的代码中就不能运行,后来发现,自己的代码是在后台运行的,Frontia Demo是在前台运行的。
原因是mCloudStorage.downloadFile()会创建Handler,而创建Handler是需要Looper消息循环来初始化的。如果在自己的子线程中调用mCloudStorage.downloadFile(),这个子线程是没有Lopper消息循环的,自然就创建不了Handler,直接报错:
03-28 12:40:29.120: E/AndroidRuntime(21077): FATAL EXCEPTION: Thread-6094
03-28 12:40:29.120: E/AndroidRuntime(21077): java.lang.RuntimeException: Can‘t create handler inside thread that has not called Looper.prepare()03-28 12:40:29.120: E/AndroidRuntime(21077): at com.hugedata.speedometer.AppFileActivity$1LooperThread.run(AppFileActivity.java:152)
也就是说,子线程默认没有Looper,连Handler都创建不了。
解决方法,添加Looper:
注意示例代码中Looper.prepare(); Looper.myLooper().quit(); Looper.loop();这三句的位置:
//-----------------------------------从百度云存储下载文件
private boolean doDownloadFromBaiduCloud() {
FileUtils.deleteFile(LOCAL_FILE_NAME);
Looper.prepare();
//Frontia.init(HugeDataApp.getContext(), Constants.BaiduAPIKey_XMF);
mCloudStorage = Frontia.getStorage();
//三个参数
mCloudStorage.downloadFile(mFile,
new FileProgressListener() {
@Override
public void onProgress(String source, long bytes, long total) {
}
},
new FileTransferListener() {
@Override
public void onSuccess(String source, String newTargetName) {
mSuccess = true;
Looper.myLooper().quit();
}
@Override
public void onFailure(String source, int errCode, String errMsg) {
Looper.myLooper().quit();
mSuccess = false;
}
});
Looper.loop();
return mSuccess;
}
百度Frontia应用数据存储在后台运行不起来,布布扣,bubuko.com
原文:http://blog.csdn.net/olevin/article/details/22391265