由浅入深研究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/

更多相关文章

  1. android中高级必会面试知识及答案(继续更新补充)
  2. Android的handler机制浅谈
  3. Android(安卓)网络图片异步加载实例
  4. Android(安卓)OpenGL ES 1.x 教程的Native实现
  5. Android(安卓)Handler机制之ThreadLocal
  6. android面试题目大全,android笔试题目集锦
  7. 十、Android的消息机制
  8. 慕课网:Android异步加载AsyncTask项目实战上
  9. AsyncTask异步任务

随机推荐

  1. Android中的布局方式(一)
  2. Android提高十六篇之使用NDK把彩图转换灰
  3. Android(安卓)多分辨率自适应总结
  4. Android系统的Root权限获取与检测
  5. Android实现登录功能,Android与服务器数据
  6. 一个小码农的5年历程
  7. Android(安卓)面试题(答案最全)
  8. Android(安卓)API Guides---Processes an
  9. Android(安卓)RecyclerView和ListView多
  10. 【Android入门的常见问题Part1】android: