Android按键监听和AsyncTask异步处理

对一个控件设置监听

比如说有一个id为send的button
首先要声明出这样一个button:private Button send;
然后在onCreat(Bundle saveInstanceState)函数中对Button进行寻找吧:send=(Button)findViewById(R.id.send);
为Button注册一个监听器,并调用onClick()方法,当点击按钮的时候就会执行。

send.setOnClickListener(new OnClickListener(){
            public void onClick(View v){
                String status="控制系"+share.getText().toString();
//share是一个定义的EditText控件
                String TAG="SEND";
                Log.d(TAG,"onClicked with status:"+status);
                new PostTask().execute("<"+getPackageName()+">"+status);
            }
        });

使用AsyncTask

为什么要使用AsyncTask
以我们自己适用手机为例,我们希望手机对我们的每一个操作都保持灵敏,然而对于我们的每一个操作后面都意味着可能会有比较耗时的操作。这样,如果只有一个线程,必然会让我们狂躁..所以我们把一些事情放在后台进行操作。


AsyncTask是什么
AsyncTask是一个抽象类,所以需要创建一个类来继承它。

public abstract class AsyncTask 
  • Params:执行AsyncTask时需要传入的参数
  • Progress:如果需要在当前界面上显示进度
  • Result:任务执行结束后,如果需要对结果进行返回
private final class PostTask extends AsyncTask<String,Void,String>
  • 第一个泛型参数为String,意味着在执行时,需要把字符串传送到后台任务。本例是发送微博时的操作,也就是说,我在主线程中知道了自己要发送的字,然后把这些字传送到了后台,由后台具体执行post
  • 第二个参数为Void,也就是说不需要进度显示
  • 第三个参数为String,也就是说,在本任务中,如果发送成功,则返回”successful“,失败了就返回”failed“。目前看的蛮多例子都会设置为boolean

    在这个抽象类中存在经常需要重写的四个方法。

  • onPreExecute():在后台任务开始之前就进行调用,用于进行一些界面上的初始化操作,比如显示一个进度条的对话框

  • doInBackground(Params...):这个方法的所有代码都会在子线程中运行,任务完成后通过return将任务执行的结果,就是第三个参数啦,进行返回
  • onProgressUpdate(Progress...):这个里面可以对UI进行操作,对界面进行更新,类似进度条的更新吧
  • onPostExecute(Result):就让我简单粗暴的理解成任务完成之后把进度条关掉吧…

private final class PostTask extends AsyncTask<String,Void,String>{
        protected String doInBackground(String...params){
            YambaClient yambaCloud=new YambaClient("student","quick");
            try{
                yambaCloud.postStatus(params[0]);
                return"successfully posted";
            }catch(YambaClientException e){
                return"Failed";
            }
        }
        protected void onPostExecute(String result){
            super.onPostExecute(result);
            Toast.makeText(Weibo_Submit.this, result, Toast.LENGTH_LONG).show();
            if(result.startsWith("successfully"))share.setText("");

        }
    }

TOAST是Android中比较常用的一种提示方式。我好像在别的博客里写过…怎么就忘了呢…哎…

你可能感兴趣的:(android)