2017-05-27 6 views
0

URLからimageViewに画像を読み込むためのAsyncTaskがあります。 doInBackground()はurlからイメージをロードし、onPostExecute()のメソッドはイメージをimageViewに設定します。画像がロードされているとき、つまりAsyncTaskのdoInBackground()メソッドが終了していないときにユーザーがアプリを最小化するとどうなりますか?アプリケーションを最小化するときのAsyntaskの処理方法

+0

シナリオを処理するためには、ダウンロードしても設定しないでください。 –

+0

このリンクを調べることができます。https://stackoverflow.com/questions/31085406/what-happens-to-running-asynctasks-when-アクティビティの変更 –

+0

私はアクティビティの変更を言っているのではなく、画像がロードされているときにメニューボタンを押してユーザをバックグラウンドに置くだけです。 – pvn

答えて

0

asynctaskは引き続き動作します。 UIスレッドに戻ったときのコンテキストの妥当性を処理する責任はありますか。

最高の解決策は、リスナーを設定し、それをonDestroy上に存在することを検証して破棄することです。

private class MyAsyncTask extends AsyncTask<String, String, String> { 
    private OnProcessFinishedListener listener; 

    public void setOnProcessFinishedListener(OnProcessFinishedListener listener) { 
     this.listener = listener; 
    } 

    @Override 
    protected String doInBackground(String... urls) { 
     ///Your request some info and return it. This case, a String, but could be anything. 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     if(listener != null) { 
      listener.onProcessFinished(result); 
     } 
    } 
} 
public interface OnProcessFinishedListener { 
    void onProcessFishined(String result); 
} 

さて、あなたの活動では、asynctaskを呼び出す前に、呼び出し:

myAsyncTask.setOnProcessFinishedListener(new OnProcessFinishedListener {  
    void onProcessFishined(String result) { 
     textView.setText(result); 
    } 
}); 

そして、あなたのonDestroyメソッドで:

myAsyncTask.setOnProcessFinishedListener(null); 

他の方法は、もう少しエレガント使用するよりもあります。 AsyncTask(画像のためにPicassoやGlideを試しましたか?)、これはStartです。

+0

AsyncTaskが機能し続けるようになります。私が理解したいのは、ユーザーがメニューボタンを押した(アクティビティが破壊されていない)ため、アプリがバックグラウンドであるかどうかです。私たちの活動はフォアグラウンドではありませんが、UIスレッドはイメージをイメージビューに設定できますか? – pvn

+0

ImageViewが存在し、到達可能な限り、 –