我们有时候会通过WebServices上传数据,如果信息量过大并没有提示,用户会觉得是死机,或是系统崩溃,这时候我们可以用到AsyncTask(异步任务)来提示上传信息,例如:正在上传数据...
这里是官方对AsyncTask的详细文档:https://developer.xamarin.com/api/type/Android.OS.AsyncTask/
下面是我对AsyncTask的了解:首先实例化继承AsyncTask的类InitTask(当然这里可以随便命名) --> 接着开始执行任务 OnPreExecute 方法 --> 后台执行任务 DoInBackground 方法 --> 执行后返回 OnPostExecute ,简单使用调用这几个方法就足够了,哪里不足希望大佬补充。
using Android.App; using Android.Widget; using Android.OS; using System.Threading; namespace AsyncTaskDemo { [Activity(Label = "AsyncTaskDemo", MainLauncher = true)] public class MainActivity : Activity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // Set our view from the "main" layout resource SetContentView(Resource.Layout.Main); Button btn = FindViewById<Button>(Resource.Id.button1); btn.Click += (s, e) => { new InitTask(this).Execute(); //调用异步任务 }; } //开启一个线程,沉睡10秒,模拟上传数据 void TestThead() { Thread.Sleep(10000); } private class InitTask : AsyncTask<Java.Lang.Void, Java.Lang.Void, string[]> { MainActivity main; ProgressDialog proDialg = null; public InitTask(MainActivity _main) { main = _main; } protected override string[] RunInBackground(params Java.Lang.Void[] @params) { //throw new NotImplementedException (); return null; } //后台要执行的任务 protected override Java.Lang.Object DoInBackground(params Java.Lang.Object[] @params) { main.TestThead(); return "OK"; } //执行后返回 protected override void OnPostExecute(Java.Lang.Object result) { proDialg.Cancel(); if (result.ToString() != "OK") Toast.MakeText(main, "获取数据失败!", ToastLength.Short); } //开始执行任务 protected override void OnPreExecute() { proDialg = new ProgressDialog(main); proDialg.SetProgressStyle(ProgressDialogStyle.Spinner); //设置界面不可操作 返回键有效 //proDialg.SetCanceledOnTouchOutside(false); proDialg.SetMessage("正在上传数据..."); //设置界面不可操作 返回键无效 proDialg.SetCancelable(false); proDialg.Show(); } } } }
最后附上下载地址:
链接: https://pan.baidu.com/s/1u5TNukLQH5ycjBMWs4ZzLg
密码: w7q6