Android onCreate( )方法详细介绍

 更新时间:2016年09月06日 15:59:26   投稿:lqh  
本文主要介绍Android onCreate( )方法,做Android应用的朋友对onCreate()的方法并不陌生,在开发应用的时候大家应该注意什么呢,这里给大家详细说明

onCreate( )方法是android应用程序中最常见的方法之一,那么,我们在使用onCreate()方法的时候应该注意哪些问题呢?

    先看看Google Android Developers官网上的解释:

    onCreate(Bundle) is where you initialize your activity. Most importantly, here you will usually call setContentView(int) with a layout resource defining your UI, and using findViewById(int) to retrieve the widgets in that UI that you need to interact with programmatically.         

   Called when the activity is starting. This is where most initialization should go: calling setContentView(int) to inflate the activity‘s UI, using findViewById(int) to programmatically interact with widgets in the UI, calling managedQuery(android.net.Uri, String[], String, String[], String) to retrieve cursors for data being displayed, etc.

   You can call finish() from within this function, in which case onDestroy() will be immediately called without any of the rest of the activity lifecycle (onStart(),onResume(), onPause(), etc) executing.

   Derived classes must call through to the super class‘s implementation of this method. If they do not, an exception will be thrown.

   翻译过来就是说,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)所有的目的都是让你要启动的组件尽快上场,而不是以画好妆为主,这样的话客人会等不及的,顾客就是上帝。

以上就是对Android OnCreate()方法的详细介绍,后续继续补充相关知识,谢谢大家对本站的支持!

相关文章

  • Android开发调用WebService的方法示例

    Android开发调用WebService的方法示例

    这篇文章主要介绍了Android开发调用WebService的方法,结合实例形式较为详细的分析了Android调用WebService的原理、实现方法与相关操作注意事项,需要的朋友可以参考下
    2017-10-10
  • Android编程双重单选对话框布局实现与事件监听方法示例

    Android编程双重单选对话框布局实现与事件监听方法示例

    这篇文章主要介绍了Android编程双重单选对话框布局实现与事件监听方法,涉及Android双重单选对话框的界面布局与事件监听、响应等相关操作技巧,需要的朋友可以参考下
    2017-10-10
  • Android控件CardView实现卡片效果

    Android控件CardView实现卡片效果

    这篇文章主要为大家详细介绍了Android控件CardView实现卡片效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • Android实现带页面切换的锁屏功能

    Android实现带页面切换的锁屏功能

    这篇文章主要为大家详细介绍了Android实现带页面切换的锁屏功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Android提醒微技巧你真的了解Dialog、Toast和Snackbar吗

    Android提醒微技巧你真的了解Dialog、Toast和Snackbar吗

    这篇文章主要介绍了Android提醒微技巧你真的了解Dialog、Toast和Snackbar吗的相关资料,需要的朋友可以参考下
    2016-07-07
  • Flutter移动端进行多渠道打包发布的全过程

    Flutter移动端进行多渠道打包发布的全过程

    在使用flutter开发的过程中,需要根据不同的环境,不同的包名来打包,下面这篇文章主要给大家介绍了关于Flutter移动端进行多渠道打包发布的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Android自定义View验证码输入框

    Android自定义View验证码输入框

    这篇文章主要为大家详细介绍了自定义View验证码输入框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • Android CheckBox中设置padding无效解决办法

    Android CheckBox中设置padding无效解决办法

    这篇文章主要介绍了Android CheckBox中设置padding无效解决办法的相关资料,希望通过本文能帮助到大家,让大家解决这样类似的问题,需要的朋友可以参考下
    2017-10-10
  • Android调试出现The selected device is incompatible问题解决

    Android调试出现The selected device is incompatible问题解决

    这篇文章主要介绍了Android调试出现The selected device is incompatible问题解决的相关资料,需要的朋友可以参考下
    2017-01-01
  • Android Activity启动流程刨析

    Android Activity启动流程刨析

    Activity作为Android四大组件之一,他的启动绝对没有那么简单。这里涉及到了系统服务进程,启动过程细节很多,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
    2022-08-08

最新评论