У меня есть приложение, которое загружает видеофайл размером примерно 6 МБ
Я пытаюсь запустить это приложение на Blackberry Curve 9360, который имеет 32 МБ хранилища мультимедиа
Иногдаэто приложение запускается и может загрузить видео без проблем, однако в других случаях неполная загрузка через процесс загрузки завершается с ошибкой ввода-вывода, которая сообщает: «В файловой системе недостаточно свободной памяти для выполнения этого действия»
после сбоя таким образом, я могу открыть программное обеспечение BlackBerry Desktop и проверить раздел файлов и увидеть, что устройство действительно сообщает о заполнении 32/32 МБ.
Если я затем перезагружаюНа устройстве с alt-shift-del и открытием настольного программного обеспечения Blackberry снова используемое пространство сократилось до 5-6 / 32 МБ заполненного
Иногда в этот момент я могу запустить свое приложение сейчас и получить егоУспешная загрузка, но в других случаях она снова выдает мне ту же ошибку полного заполнения хранилища.Единственное, что я могу заметить, похоже, что это может повлиять на то, завершится ли это неудачей или нет, это то, сколько времени занимает загрузка (то есть, это происходит успешно по Wi-Fi, при хорошем сигнале 3g и при неудачном сигнале 3g, но в лучшем случае это анекдотично).)
Я использовал это одно и то же приложение на нескольких разных устройствах Blackberry, в том числе на нескольких других устройствах Curve с таким же объемом памяти, и никогда раньше не сталкивался с этой проблемой.
Мой вопрос: Кто-нибудь видел, как устройство кривой BlackBerry ведет себя так, что оно сообщает о неправильном объеме памяти, который исправляется перезагрузкой?
И есть ли что-то в этом коде загрузки, которое может вызывать такое поведение?
class DownloadThread extends Thread {
public void run()
{
HttpConnection httpConn = null;
InputStream is = null;
try{
httpConn = (HttpConnection)Connector.open(videoUrl + ";interface=wifi");
is = httpConn.openInputStream();
}catch(IOException e){
try{
httpConn = (HttpConnection)Connector.open(videoUrl);
is = httpConn.openInputStream();
}catch(IOException ioe){
System.out.println("891: "+e.toString());
}
}
try{
if (!videoFconn.exists())
videoFconn.create();
else{
videoFconn.delete();
videoFconn.create();
}
OutputStream os = videoFconn.openOutputStream();
lengthOfWebFile = httpConn.getLength();
total = 0;
System.out.println("##################### length of web file = " + lengthOfWebFile + " #################");
byte data[] = new byte[256];
while ((count = is.read(data)) != -1) {
total += count;
progress = (int)(total*100/lengthOfWebFile);
if(model.getValue() < progress){
UiApplication.getUiApplication().invokeLater(new Runnable()
{
public void run()
{
EmbeddedMediaScreen.this.model.setValue(progress);
}
});
}
//write this chunk
os.write(data, 0, count);
Thread.yield();
}
os.flush();
os.close();
is.close();
httpConn.close();
lengthOfLocalFile = videoFconn.fileSize();
System.out.println("###################### Local Length = " + lengthOfLocalFile + "#####################");
if(lengthOfLocalFile == lengthOfWebFile){
amDownloading = false;
startVideo();
}else{
downloadVideo();
}
}catch(FileNotFoundException fnf){
}catch(IOException e){
//ScreenSaverActivity.errorDialog("975: "+e.toString());
System.out.println("980: "+e.toString());
//e.printStackTrace();
}catch(NullPointerException npe){
System.out.println("983: "+npe.toString());
} /*catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println(e.getMessage());
}*/
}
public synchronized void postProgress(final int p){
UiApplication.getUiApplication().invokeLater(new Runnable()
{
public void run()
{
//Set the progress bar
EmbeddedMediaScreen.this.model.setValue(p);
}
});
}
}