zoukankan      html  css  js  c++  java
  • Android(java)学习笔记101:Java程序入口和Android的APK入口

    1. Java程序的入口:static main()方法

    public class welcome extends Activity {
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
            }
            
            public static void main(String[]  args) {
                System.out.println("Hello dalvik");
            }
    
    }

    2. APK的运行入口:ActivityThread类APK入口类是ActivityThread,Activity仅仅是一个回调的类

    ActivityThread类它管理应用进程的主线程的执行(相当于普通Java程序的main入口函数),并根据AMS的要求(通过IApplicationThread接口,AMS为Client、ActivityThread.ApplicationThread为Server)负责调度和执行activities、broadcasts和其它操作。

    在Android系统中,在默认情况下,一个应用程序内的各个组件(如Activity、BroadcastReceiver、Service)都会在同一个进程(Process)里执行,且由此进程的【主线程】负责执行。

    在Android系统中,如果有特别指定(通过android:process),也可以让特定组件在不同的进程中运行。无论组件在哪一个进程中运行,默认情况下,他们都由此进程的【主线程】负责执行。

    【主线程】既要处理Activity组件的UI事件,又要处理Service后台服务工作,通常会忙不过来。为了解决此问题,主线程可以创建多个子线程来处理后台服务工作,而本身专心处理UI画面的事件。

    【主线程】的主要责任

           • 快速处理UI事件。而且只有它才处理UI事件, 其它线程还不能存取UI画面上的对象(如TextView等),此时, 主线程就叫做UI线程。基本上,Android希望UI线程能根据用户的要求做出快速响应,如果UI线程花太多时间处理后台的工作,当UI事件发生时,让用户等待时间超过5秒而未处理,Android系统就会给用户显示ANR提示信息

             只有UI线程才能执行View派生类的onDraw()函数

          • 快速处理Broadcast消息。【主线程】除了处理UI事件之外,还要处理Broadcast消息。所以在BroadcastReceiver的onReceive()函数中,不宜占用太长的时间,否则导致【主线程】无法处理其它的Broadcast消息或UI事件。如果占用时间超过10秒, Android系统就会给用户显示ANR提示信息

    注意事项:

          • 尽量避免让【主线程】执行耗时的操作,让它能快速处理UI事件和Broadcast消息。

          • BroadcastReceiver的子类都是无状态的,即每次启动时,才会创建其对象,然后调用它的onReceive()函数,当执行完onReceive()函数时,就立即删除此对象。由于每次调用其函数时,会重新创建一个新的对象,所以对象里的属性值,是无法让各函数所共享。  

    附加备注:

     View组件由UI线程(主线程)所执行。如果需要迅速更新UI画面或UI画图需要较长时间,则需要使用SurfaceView。它可由后台线程(background thread)来执行,而View只能由UI(主)线程执行。SurfaceView内有高效的rendering机制,可以让后台线程快速刷新Surface的内容。

          View ---> UI(主)线程

          SurfaceView ---> 后台线程   

  • 相关阅读:
    MVC中的SelectList函数使用笔记
    如何用JQuery将View中的值Post到Controller
    几种主流网页开发语言的思考(上)
    郁闷的OpenPOP的MIME Parser
    关于OpenPOP/OpenSMTP/Mail.Net的一些东西……
    一个不知道是不是很笨的MS SQL数据库连接类
    Ruby on Rails 细节中的精彩
    关于FreeTextBox 1.63/2.0.7/3.0RC/3.0的一些东西
    翻译:微软是如何输掉API之战(上)
    MSN Messenger的用户管理
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4731820.html
Copyright © 2011-2022 走看看