android开发之onCreate( )方法详解
2015-03-19 20:23
239 查看
这里我们只关注一句话:This is where you should do all of your normal static set up。其中我们只关注normal static,
normal:常规的、通常的、一般的 。
static:静态的,不变的
onCreate( )方法是android应用程序中最常见的方法之一,那么,我们在使用onCreate()方法的时候应该注意哪些问题呢?
onCreate()函数是在activity初始化的时候调用的,通常情况下,我们需要在onCreate()中调用setContentView(int)函数填充屏幕的UI,一般通过findViewById(int)返回xml中定义的视图或组件的ID。子类在重写onCreate()方法的时候必须调用父类的onCreate()方法,即super.onCreate(),否则会抛出异常。
但是,我们必须要注意的是,在onCreate()函数里我们需要配置一些必要的信息,但是并不是所有的事情都能在这里做。我们知道,一个activity启动调用的第一个函数就是onCreate,它主要做这个activity启动时一些必要的初始化工作,这个函数调用完后,这个activity并不是说就已经启动了,或者是跳到前台了。而是还需要其他的大量工作,我们知道:onCreate之后还有onRestart()和onStart()等,实际上onStart()调用完毕了这个activity还没有完全启动,也只是前台可见,直到 onResume() 调用后这个onCreate才算终于启动。既然这样,那么在一个activity真正启动之前任何相当耗时的动作都会导致activity启动缓慢,特别是在onCreate里面耗时长的话可能导致极差的用户体验。
以下这段代码很多雷区:
这是一个APP的一个Activity的onCreate的写法。其实这段代码没有什么问题,而且看起来也是比较简单的代码。不过里面大量危险的代码段:不管是dataLoad = new DataLoading(); 还是 mSpeedDailDataMgr = new SpeedDailMgr(this);更或者是loadGripView();甚至updateEnabledCard();这么危险的处理都是不应该在这里来处理的。这里包含了加载数据库数据、读取文件信息、读取SIM卡信息,这些操作都是有可能抛出异常的,而且其操作耗时也是不确定的!对于面对这样问题,我觉得应该注意下面几个方面:
(1)在Activity启动前,尽量少做。
(2)对于布局比较复杂的时候,可以考虑不要一次性全部加载上,动态加载是一个好的办法。
(3)对于及时需要的数据,加载起来耗时的又有异常危险的,一定记得开辟一个线程来做这些动作,千万记得不要做阻塞主线程(UI线程)的任何事情。
(4)对于特殊情况下,Activity启动确实需要大量工作时候,可以考虑先加载一个简单的布局(或是Activity)来过渡.。
(5)所有的目的都是让你要启动的组件尽快上场,而不是以画好妆为主,这样的话客人会等不及的,顾客就是上帝。
参考文章:http://www.2cto.com/kf/201403/285613.html
normal:常规的、通常的、一般的 。
static:静态的,不变的
onCreate( )方法是android应用程序中最常见的方法之一,那么,我们在使用onCreate()方法的时候应该注意哪些问题呢?
onCreate()函数是在activity初始化的时候调用的,通常情况下,我们需要在onCreate()中调用setContentView(int)函数填充屏幕的UI,一般通过findViewById(int)返回xml中定义的视图或组件的ID。子类在重写onCreate()方法的时候必须调用父类的onCreate()方法,即super.onCreate(),否则会抛出异常。
但是,我们必须要注意的是,在onCreate()函数里我们需要配置一些必要的信息,但是并不是所有的事情都能在这里做。我们知道,一个activity启动调用的第一个函数就是onCreate,它主要做这个activity启动时一些必要的初始化工作,这个函数调用完后,这个activity并不是说就已经启动了,或者是跳到前台了。而是还需要其他的大量工作,我们知道:onCreate之后还有onRestart()和onStart()等,实际上onStart()调用完毕了这个activity还没有完全启动,也只是前台可见,直到 onResume() 调用后这个onCreate才算终于启动。既然这样,那么在一个activity真正启动之前任何相当耗时的动作都会导致activity启动缓慢,特别是在onCreate里面耗时长的话可能导致极差的用户体验。
以下这段代码很多雷区:
protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); mContext = this; setContentView(R.layout.main); dataLoad = new DataLoading(); mScrollLayout = (ScrollLayout)findViewById(R.id.ScrollLayoutTest); btnExit = (ImageButton)findViewById(R.id.btn_exit); btnExit.setOnClickListener(btnExitClickListener); btnContacts = (ImageButton)findViewById(R.id.btn_contacts); btnContacts.setOnClickListener(btnContactsClickListener); mSpeedDailDataMgr = new SpeedDailMgr(this); loadGripView(); //in MTK //mCallOptionHandler = new CallOptionHandler(this); mCallOptionHandler = new ContactsCallOptionHandler(this, new ContactsCallOptionHandlerFactory()); //don't consider getting no data, ex: when starting up updateEnabledCard(); }
这是一个APP的一个Activity的onCreate的写法。其实这段代码没有什么问题,而且看起来也是比较简单的代码。不过里面大量危险的代码段:不管是dataLoad = new DataLoading(); 还是 mSpeedDailDataMgr = new SpeedDailMgr(this);更或者是loadGripView();甚至updateEnabledCard();这么危险的处理都是不应该在这里来处理的。这里包含了加载数据库数据、读取文件信息、读取SIM卡信息,这些操作都是有可能抛出异常的,而且其操作耗时也是不确定的!对于面对这样问题,我觉得应该注意下面几个方面:
(1)在Activity启动前,尽量少做。
(2)对于布局比较复杂的时候,可以考虑不要一次性全部加载上,动态加载是一个好的办法。
(3)对于及时需要的数据,加载起来耗时的又有异常危险的,一定记得开辟一个线程来做这些动作,千万记得不要做阻塞主线程(UI线程)的任何事情。
(4)对于特殊情况下,Activity启动确实需要大量工作时候,可以考虑先加载一个简单的布局(或是Activity)来过渡.。
(5)所有的目的都是让你要启动的组件尽快上场,而不是以画好妆为主,这样的话客人会等不及的,顾客就是上帝。
参考文章:http://www.2cto.com/kf/201403/285613.html
相关文章推荐
- android开发之onCreate( )方法详解
- android开发之onCreate( )方法详解
- android开发之onCreate( )方法详解
- Android游戏开发之旅View类详解自定义View的常用方法
- Android源码开发-Android系统时间时区以及12/24小时制等修改方法详解
- 【Android】Android开发之著名框架ButterKnife的使用详解,butterknife8.1.0版本的使用方法
- Android开发教程之调用摄像头功能的方法详解
- Android开发之MediaPlayer基本使用方法详解
- Android游戏开发27:详解Android项目下的hdpi、mdpi和ldpi文件夹及设置游戏高清版本的方法
- Android使用onCreateOptionsMenu()创建菜单Menu的方法详解
- android开发之Fragment 的生命周期及使用方法详解
- Android开发中使用WebView控件浏览网页的方法详解
- Android开发,onCreate()方法介绍
- 详解Android开发中硬件加速支持的使用方法
- Android OnCreate()中获取控件高度与宽度两种方法详解
- 解决Fedora14下eclipse进行android开发,ibus提示没有输入窗口的方法详解
- Android——onCreate( )方法详解(转)
- android开发之Fragment 的生命周期及使用方法详解
- [RK3288][Android7.1.2] Launcher3 源码阅读之step2:详解Launcher的OnCreate方法的A部分
- 详解Android应用开发中Intent的作用及使用方法