Я использую parse.com
Android SDK для управления некоторыми изображениями в своем приложении. Является ли cancel()
единственным способом остановить транзакцию с сервером parse.com
?
Минимальный пример:
final ParseFile file = ... ;
file.getDataInBackground(new GetDataCallback() {
//called when loading is done
@Override
public void done(byte[] bytes, ParseException e) {
Log.e(TAG, String.valueOf(bytes == null));
}
}, new ProgressCallback() {
//called to notify progress
@Override
public void done(Integer integer) {
Log.e(TAG, String.valueOf(integer));
if (integer > 50) {
file.cancel();
}
}
});
Я бы ожидал, что загрузка остановится после достижения 50%, но это не так. Мой журнал в этой ситуации:
1
2
3
....
49
50
51
....
98
99
100
true
Единственное отличие от времени, которое вы вызываете cancel()
, а не в случае, если вы отменили результат byte[]
, равен нулю. Но это действительно второстепенно, дело в том, что file
продолжает потреблять полосу пропускания и, более того, накладывается на будущие загрузки, замедляя работу.
Есть ли способ остановить загрузку ParseFile? Вы видите какое-нибудь обходное решение, например, прекращение его потока? Может быть, что-то использует базовые рамки болтов? Использование моей собственной задачи async?
Пример: continueWhile()
метод может быть полезен, но я не могу понять, как его использовать.
Я хотел бы знать причину нисходящего, возможно, общего названия? Это действительно то, что я испытываю: ParseFile.cancel() не работает. И это должно, согласно официальному docs.
Комментарии предполагают, что я должен просто вызвать break
. Хотя я не думаю, что это сработает, я могу уточнить, что код, который я опубликовал, был минимальным, сжатым рабочим примером, обеспечивающим как контекст, так и проблему. Я не хочу cancel()
транзакции изнутри обратного вызова прогресса; Я хочу называть parseFile.cancel()
всюду. Я включил обратный вызов, чтобы показать, что, хотя он должен остановиться, это не так.
Изменить Это то, что я действительно пытаюсь сделать. Я пробовал разные способы, но это все.
ParseFile currentFile;
public void setFile(ParseFile file) {
if (currentFile != null) {
currentFile.cancel();
}
currentFile = file;
currentFile.getDataInBackground(new GetDataCallback() {
...
}, new ProgressCallback() {
... // logs
});
}
С таким кодом и скажем, два больших изображения для загрузки, все идет так:
//calling setFile(file1)
1
2
3
...
20
21
22
//calling setFile(file2), thus also calling file1.cancel()
1
2
23 //file1 going on!
3
24
4
25
... //things get slower and this screws up progress bars and such.