不知道为什么,刚才写的安卓下的事件监听会待审核,好吧,只是为了记录下我的学习状态而已
接下来说说安卓下的线程安全的问题
安卓的主线程是不允许用户将耗时的事情放在主线程中进行处理的,因为这样容易造成线程的不安全
线程安全:在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();
}
}