由浅入深研究Android(2)--好吧,我是一个main方法

由浅入深研究Android(2)--好吧,我是一个main方法

    好吧,我是一个main方法,一个简简单单的main方法。但是你确定你真的了解我吗?

   1.为啥要有main方法

    为啥要有mian函数?假设你写了一大堆程序,当你要运行时你会你怎样让系统知道,你的程序是从start()方法开始执行,还是run()方法开始执行??系统不会知道你的想法,所以为了规范,也就有了main函数。

就像开车一样,你们约定好我踩油门就是加速,踩刹车就是刹车,如果你买了辆汽车没有油门,那你就在那郁闷哇。

    就像上述例子,系统会告诉你,我只会从你的main函数开始执行(踩油门)。因为系统需要一个程序入口。但是我们又想起在Dos的时候我们为了确定IP配置是否错误,往往会用到这个命令ipconfig -all;为了接收后面的-all命令不同的语言采用了不同的方法。

   

Java的入口与参数

    public static void main(String[] args)

   {

   }

C ++中的入口与参数

int main( int argc, char *argv[])

          //argc // 程序参数的个数

          //argv[]// 实参(从程序名开始,null结束)

 

 

    但是是不是所有语言都是有main函数开始的呢?不是,有的系统把main函数封装到其内部的容器里了,所以我们在用servlet的时候程序的入口在doGet()doPost ()函数处。

    servlet系统来说,他们约定好了要从doGet()doPost ()方法出调用。同样我们开发Android的时候Activity的入口就是onCreate()当然这是对于不去深入系统时,我们所看到的入口,也就是Android系统为我们提供的入口,但是其实其不能算是一个入口,其只能算是一个系统回调。

 

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

    }

   

 

 

 

 

总结:

·main函数是程序体和执行程序的系统约定的一个入口。

·对于不同的系统会拥有不同的入口函数。

   2.进程和线程

进程是应用程序的执行实例,线程是进程内的执行路径。启动“记事本”时,操作系统创建进程并开始执行该进程的主线程。此线程终止时,进程也终止。

那么什么是主线程了?其实我们开始了执行一个main函数时,就是开启了一个主线程。我们来看一个例子:

 

子线程

/**

 * 子线程,这是一个子线程

 * */

class SubClass implements Runnable

{

   public void run()

   {

      for(int i = 0; i < 1000; i ++)

         {

         System.out.println("sub thread " + i);

         }

   }

}

主线程

/**

 * 主线程

 * */

public class MainThread

{

   public static void main(String[] args)

   {

      Thread mThread = new Thread(new SubClass());

      mThread.start();

      for(int i = 0; i < 100; i ++)

         {

         System.out.println("main thread " + i);

         }

   }

}

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 








运行后我们可以发现主线程和子线程是交替出现的:

main thread 36

sub thread 7

main thread 37

sub thread 8

main thread 38

sub thread 9

main thread 39

   

这里给大家所以下守护线程是啥:守护线程就是伴随着主线程的线程。这是啥意思了,其实很好理解,就是伴随着主线程结束而结束的线程

    我们做个实验:

将子线程中的循环改为10000次,并设置mThread为守护线程:

      Thread mThread = new Thread(new SubClass());

      // 设置mThread是守护线程

      mThread.setDaemon(true);

      mThread.start();

   

 

 

 

 

 

 运行后发现主线程结束后,守护线程也结束了。有兴趣的可以试一下。

    总结:

·main函数是一个线程,并且是主线程。

·守护线程是主线程结束而结束的线程。

   3.回调(callback

       如果前面看过我博客的一定对onDraw()方法很熟悉吧,为什么我们继承了View之后,重写这个方法会绘制出图像了,因为这是一个系统的回调方法。

       就像main函数一样,系统要启动主线程会调用main函数,那么Android系统要在屏幕上绘制图像,他就会调用当前显示ViewonDrwa()方法。所以我们在重写了这个方法后,系统就可以通过这个方法绘制东西了。

Android的系统里,我们会经常遇到一些回调接口: Window.Callback

HandlerCaller.Callback, KeyEvent.Callback, ComponentCallbacks...关于回调接口,我们会在后面讲解。

    后面我们会通过一个小例子,来看看利用回调方法来实现Android组件的重用。

    总结:

       ·main函数是一个回调

      ·onDraw方法也是一个回调

      ·其实系统中好多东西都可以通过回调实现。

 

 

本系列专题属于繁星皓月个人所有,欢迎转载,但需注明原文地址

http://www.cnblogs.com/lovewf/

posted @ 2012-04-01 08:30  繁星皓月  阅读(2488)  评论(6编辑  收藏  举报