我们有时候会通过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();
} 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