handler与异步任务

不知道为什么,刚才写的安卓下的事件监听会待审核,好吧,只是为了记录下我的学习状态而已
接下来说说安卓下的线程安全的问题
安卓的主线程是不允许用户将耗时的事情放在主线程中进行处理的,因为这样容易造成线程的不安全
线程安全:在java中,线程的安全就是指,例如有两个线程同时在操作同一个ArrayList的时候,我们都
知道,在add方法的时候,分两步,第一步是增加数据,第二步是增加元素的个数,那么问题就来了,
如果现在是两个线程,第一个线程实现了第一步,然后线程暂时停止,而第二个线程获得CPU的执行权,
那么添加数据,然后两个线程同时复活,然后元素只是增加了一个,这样就会造成数据的丢失的问题。
那么在安卓中,为了避免主线程被阻塞,其实在主线程如果出现阻塞的话,会有ANR错误,ANR
如果主线程收到阻塞,那么程序会蹦出一个窗口,通知用户,是否将程序关闭这样的问题。
首先利用handler这一个对象,可以在新开启的子线程中发送数据给主线程,然后通过handler指挥主线程做
什么事情,这样就不会造成线程不安全,比如我们可以传what,然后再handler.hanldeMessage(Message msg)的方法中
判断what值,然后执行相应的操作。
异步任务有两个需要注意,第一个是实现doInBackground方法,第二是onPostExecute,前面的是任务的执行,第二是任务
的返回值的处理。

 class MyTask extends AsyncTask<String,Void,String>
     {
         //异步任务进行
        protected String doInBackground(String... args) {
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            String line=null;
            StringBuilder sb=new StringBuilder();
            try {
                while((line=br.readLine())!=null){
                    sb.append(line);
                }
                return sb.toString();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }
        //获取返回值进行的操作
        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            editText_1.setText(result);
        }
    }
private  class MyClickListener implements OnClickListener
        {
            public void onClick(View v)
            {
                new MyTask().execute();
                Toast.makeText(MainActivity.this,"按钮被点击",Toast.LENGTH_SHORT).show();
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值