请教大家一些问题在看安卓官网教程,连接至网络这一节。这个教程就是教你怎么在工作线程下东西然后显示在Activity上。它自建DownloadCallback抽象类,然后在MainActivity中实现这个接口:
MainActivity extends Activity implements DownloadCallback接着创建无头Fragment在其内创建AsyncTask来下载。下载时通过回调函数,让主线程刷新界面。而这个回调类(DownloadCallback实现),不是通过构造方法或者某种Set方法送给Fragment的,而是在Fragment内部onAttach (Context context)这个方法中,来了一句:
mCallback=(DownloadCallback)context;这是什么情况,不太懂。自己查了下,这个context其实就是MainActivity,为什么context会是MainActivity,最重要的是为什么可以把MainActivity强行转换成回调对象。还有就是AsyncTask的doInBackground方法刷新进度,貌似是在工作线程里回调了MainActivity的函数,这样回调函数不就在工作线程中执行了吗?怎么做到的?
MainActivity extends Activity implements DownloadCallback接着创建无头Fragment在其内创建AsyncTask来下载。下载时通过回调函数,让主线程刷新界面。而这个回调类(DownloadCallback实现),不是通过构造方法或者某种Set方法送给Fragment的,而是在Fragment内部onAttach (Context context)这个方法中,来了一句:
mCallback=(DownloadCallback)context;这是什么情况,不太懂。自己查了下,这个context其实就是MainActivity,为什么context会是MainActivity,最重要的是为什么可以把MainActivity强行转换成回调对象。还有就是AsyncTask的doInBackground方法刷新进度,貌似是在工作线程里回调了MainActivity的函数,这样回调函数不就在工作线程中执行了吗?怎么做到的?
https://developer.android.google.cn/training/basics/network-ops/connecting
@Override
public void onAttach(Context context) {
super.onAttach(context);
// Host Activity will handle callbacks from task.
mCallback = (DownloadCallback<String>) context;
}还有一段:
connection.connect();
publishProgress(DownloadCallback.Progress.CONNECT_SUCCESS);
int responseCode = connection.getResponseCode();
if (responseCode != HttpsURLConnection.HTTP_OK) {
throw new IOException("HTTP error code: " + responseCode);
}
// Retrieve the response body as an InputStream.
stream = connection.getInputStream();
publishProgress(DownloadCallback.Progress.GET_INPUT_STREAM_SUCCESS, 0);
if (stream != null) {
// Converts Stream to String with max length of 500.
result = readStream(stream, 500);
}
而onAttach这个方法就是fragmananger把MainActivity传进去了而已,并且show之后就一定会立即调用的,这个不用太深究。教程只是告诉你这样能写,真正实战如果这样写最后你会疯的,太乱了。
你可以看看这个:https://blog.csdn.net/weimingjue/article/details/88528373