但是加到自己的代码中就不能运行,后来发现,自己的代码是在后台运行的,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