This class was deprecated in API level 30.
Use the standard java.util.concurrent or Kotlin concurrency utilities instead.
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
//실행
new DownloadFilesTask().execute(url1, url2, url3);
ExecutorService executorService = Executors.newFixedThreadPool(4);
Handler mainThreadHandler = HandlerCompat.createAsync(Looper.getMainLooper());
//
public class LoginRepository {
...
private final Handler resultHandler;
public LoginRepository(LoginResponseParser responseParser, Executor executor,
Handler resultHandler) {
this.responseParser = responseParser;
this.executor = executor;
this.resultHandler = resultHandler;
}
public void makeLoginRequest(
final String jsonBody,
final RepositoryCallback<LoginResponse> callback
) {
executor.execute(new Runnable() {
@Override
public void run() {
try {
Result<LoginResponse> result = makeSynchronousLoginRequest(jsonBody);
notifyResult(result, callback);
} catch (Exception e) {
Result<LoginResponse> errorResult = new Result.Error<>(e);
notifyResult(errorResult, callback);
}
}
});
}
private void notifyResult(
final Result<LoginResponse> result,
final RepositoryCallback<LoginResponse> callback,
) {
resultHandler.post(new Runnable() {
@Override
public void run() {
callback.onComplete(result);
}
});
}
...
}
interface StackOverflowService {
@GET("/users")
fun getTopUsers(): Single<List<User>>
@GET("/users/{userId}/badges")
fun getBadges(
@Path("userId") userId: Int
): Single<List<Badge>>
@GET("/users/{userId}/top-tags")
fun getTags(
@Path("userId") userId: Int
): Single<List<Tag>>
}
class MyViewModel(
private val service: StackOverflowService
) : ViewModel() {
private val disposable = CompositeDisposable()
fun load() {
disposable +=
service.getTopUsers()
.subscribeOn(io())
.observeOn(mainThread())
.subscribe(
{ users -> updateUi(users) },
{ e -> updateUi(e) }
)
}
private fun updateUi(s: Any) {
//...
}
override fun onCleared() {
disposable.clear()
}
}
interface StackOverflowService {
@GET("/users")
suspend fun getTopUsers(): List<User>
@GET("/users/{userId}/badges")
suspend fun getBadges(
@Path("userId") userId: Int
): List<Badge>
@GET("/users/{userId}/top-tags")
suspend fun getTags(
@Path("userId") userId: Int
): List<Tag>
}
class MyViewModel(
private val service: StackOverflowService
) : ViewModel() {
fun load() {
viewModelScope.launch {
try {
val users = service.getTopUsers()
updateUi(users)
} catch (e: Exception) {
updateUi(e)
}
}
}
private fun updateUi(s: Any) {
//...
}
}