/*网络上请求数据: 申请网络权限 读写存储权限 在manifest里加三行 在strings里设置一下常量
ANR(Application Not Responding)
普通的主线程更新:Activity.runOnUIThread(Runnable),View.post(Runnable),View.postDelayed(Runnable,long)。
AsyncTask 类通常用来在执行后台任务的同时刷新 UI,通过调用execute()方法触发后台任务的执行
,首先会回调 AsyncTask 的onPreExecute(),接着回调doInBackground()来执行自定义的后台任务
,最后回调onPostExecute()方法用来刷新UI。
目的:方便后台线程中操作后更新UI,实现:Thread和Handler进行了封装,实质:Handler异步消息处理机制。
泛型参数 <Params,Progress,Result>
UI操作 onPreExecute预执行 onPostExecute后执行
后台线程操作 doInBackground
输入输出 Params,Result
进度显示 onProgressUpdate
*/
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
public static final int INIT_PROGRESS = 0;
public static final String APK_URL =
"http://download.sj.qq.com/upload/connAssitantDownload/upload/MobileAssistant_1.apk";
public static final String FILE_NAME = "imooc.apk";
private ProgressBar mProgressBar;
private Button mDownloadButton;
private TextView mResultTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化视图
initView();
// 设置点击监听
setListener();
// 初始化UI数据
setData();
//也可以调用封装的方法类
DownloadHelper.download(APK_URL, "", new DownloadHelper.OnDownloadListener.SimpleDownloadListener() {
@Override
public void onSuccess(int code, File file) {
}
@Override
public void onFail(int code, File file, String message) {
}
@Override
public void onStart() {
super.onStart();
}
@Override
public void onProgress(int progress) {
super.onProgress(progress);
}
});
}
private void initView() {
mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
mDownloadButton = (Button) findViewById(R.id.button);
mResultTextView = (TextView) findViewById(R.id.textView);
}
private void setListener() {
//点击事件触发异步下载
mDownloadButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//实例化自定义异步下载的对象
DownloadAsyncTask asyncTask = new DownloadAsyncTask();