monodroid开发之--call Hanlder

monodroid和java在开发android应用程序的差不多。贴点代码希望有对研究monodroid的兄弟帮助。

 

(应用http://www.cnblogs.com/TerryBlog/archive/2010/08/25/1808445.html)android 有一种叫消息队列的说法,这里我们可以这样理解:假如一个隧道就是一个消息队列,那么里面的每一部汽车就是一个一个消息,这里我们先忽略掉超车等种种因素,只那么先进隧道的车将会先出,这个机制跟我们android 的消息机制是一样的。

Android 的线程消息机制

android 在设计的时候引入了 wince 的消息机制,即将每一个消息发送到队列里面,遵循先进先出原则。发送消息并不会阻塞线程,而接收线程会阻塞线程,这是因为 Android 的Handler 机制,当Handler 处理完一个 Message 对象才会接着去取下面一个消息进行处理。

 

 

test_Handler.cs

using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;

using  Android.App;
using  Android.Content;
using  Android.OS;
using  Android.Runtime;
using  Android.Views;
using  Android.Widget;
using  Android.Util;

namespace  Demo
{
    [Activity(Label 
=   " test_Handler " )]
    
public   class  test_Handler : Activity
    {
        
public   const   int  CALL_FROM_WEB_COMPLETE  =   0x001002 ;
        
public   const   int  CALL_FROM_WEB_SUCCESSFUL  =   0x001003 ;

        
protected  Handler handler  =   null ;
        
private  Handler_CallBack handler_CallBack  =   null ;


        
protected   override   void  OnCreate(Bundle bundle)
        {
            
base .OnCreate(bundle);

            handler_CallBack 
=   new  Handler_CallBack();
            handler_CallBack.Completed 
+=  (o, e)  =>
            {
                
// ..call function
            };
            handler 
=   new  Handler(handler_CallBack);

            System.Threading.ThreadPool.QueueUserWorkItem((objs) 
=>
            
// ..or handler.Post(() =>
            {
                
try
                {
                   
// ..execute function
                }
                
catch  (Exception ex)
                {
                    Log.I(
" Error " , ex.ToString());
                }
                
finally
                {
                    handler.SendMessage(
new  Message() { What  =  CALL_FROM_WEB_COMPLETE, Arg1  =  CALL_FROM_WEB_COMPLETE });
                }
            });
        }

        
internal   class  Handler_CallBack : Handler.ICallback
        {
            
public   event  EventHandler Completed;

            
public   bool  HandleMessage(Message msg)
            {
                
if  (msg.What  ==  CALL_FROM_WEB_COMPLETE)
                {
                    
if  (Completed  !=   null
                    {
                        Completed(CALL_FROM_WEB_SUCCESSFUL, 
new  EventArgs());
                    }
                    
return   true ;
                }
                
return   false ;
            }

            
public  IntPtr Handle
            {
                
get  {  return   this .Handle; }
            }
        }
    }
}

 

 

你可能感兴趣的:(call)