Xamarin.Android 使用AsyncTask提示上传动态

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

猜你喜欢

转载自www.cnblogs.com/swjian/p/9035875.html
今日推荐