Handler使用实践

对于Handler,平时基本是看代码,这里来实践回顾一下。

UI操作是线程不安全的,多个线程同时进行UI操作会出问题,所以只用主线程去处理UI事件,其他线程需要进行UI操作的时候,就通过Handler去发个消息,通知主线程去处理。主线程按照接收的消息的顺序去进行处理,这就是消息队列。

有时候,不一定是要进行UI操作,也可以使用Handler的消息队列机制。

 

以下代码中,在click方法中,开启了一个线程用来处理一个耗时操作,

   public void onClick(View src)

   {

      try {

        

         new Thread() {

            @Override

            public void run(){

               

                for (int i = 0; i < 25600; i++) {

                   SettingsObserver observer = new SettingsObserver(null);

                   observer.observe();  

                }

            }

         }.start();

        

      } catch (Exception e) {

         // TODO: handle exception

      }

     

   }

 

点了按钮后,漫长的等待很无聊,最好在界面上提示下进度,这里准备用个字符串显示循环次数。涉及到了UI操作,Handler就出场了。

 

 

 

public class MainActivity extends ActionBarActivity

implements OnClickListener{

 

   public TextView mTextView;

   private Handler mHandler = new Handler();

   public long mNum = 0;

   private Runnable myRunnable = new Runnable() {   

        public void run() { 

          mTextView.setText(mNum + " Observers had been created");

        }

    };

  

   class SettingsObserver extends ContentObserver {

       SettingsObserver(Handler handler) {

           super(handler);

       }

      

       void observe() {

          ContentResolver resolver = getContentResolver();

          resolver.registerContentObserver(

                Settings.System.getUriFor(Settings.System.ALARM_ALERT), false, this );

  

          updateSettings();

       }

       @Override

      public void onChange(boolean selfChange) {

          updateSettings();

       }

      

  

   public void updateSettings() {

   }

  

   public void onClick(View src)

   {

      try {

        

         new Thread() {

            @Override

            public void run(){

               

                for (int i = 0; i < 25600; i++) {

                   SettingsObserver observer = new SettingsObserver(null);

                   observer.observe();  

                   if (i % 100 == 0) {

                      mNum = i;

                      mHandler.post(myRunnable);

                   }

                }

            }

         }.start();

        

      } catch (Exception e) {

         // TODO: handle exception

      }

     

 

   }

  

  

   @Override

   protected void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      setContentView(R.layout.fragment_main);

 

      Button aButton = (Button)findViewById(R.id.button1);

      aButton.setOnClickListener(this);

     

      mTextView = (TextView)findViewById(R.id.textView1);

      mTextView.setText(0 + " Observers had been created");

 

/*    if (savedInstanceState == null) {

         getSupportFragmentManager().beginTransaction()

                .add(R.id.container, new PlaceholderFragment()).commit();

      }*/

   }

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值