請教大家一些問題
在看安卓官網教程,連接至網路這一節。這個教程就是教你怎么在作業執行緒下東西然后顯示在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的函式,這樣回呼函式不就在作業執行緒中執行了嗎?怎么做到的?
uj5u.com熱心網友回復:
教程地址:https://developer.android.google.cn/training/basics/network-ops/connecting
uj5u.com熱心網友回復:
有疑問的代碼:@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);
}
uj5u.com熱心網友回復:
首先你的MainActivity可以強轉成DownloadCallback這能理解吧,MainActivity也是context也能理解吧。而onAttach這個方法就是fragmananger把MainActivity傳進去了而已,并且show之后就一定會立即呼叫的,這個不用太深究。
教程只是告訴你這樣能寫,真正實戰如果這樣寫最后你會瘋的,太亂了。
你可以看看這個:https://blog.csdn.net/weimingjue/article/details/88528373
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/124308.html
標籤:Android
上一篇:新版的Android Studio 中, 怎么找不到DDMS或類似功能的視窗了呢?
下一篇:AS第一次專案出現失敗,一直報錯
