android开发之onCreate( )方法详解

栏目:技术教程 发布时间 2020-10-16 人气 

来源:http://www.mamicode.com/info-detail-301506.html

TAG:无

侵权:admin@heimacode.com

免责声明:本文图片引用自网络,如有侵权请联系我们予以删除

黑码网发布此文仅为传递信息,不代表黑码网认同其观点。

简介:标签:androidactivityoncreate方法详解 onCreate( )方法是android应用程序中最常见的方法之一,那么,我们在使用onCreate()方法的时候应该注意哪些问题呢? 先看看Google Android Developers官网上的解释: onCreate(Bundle)is where you initialize your activity. Most i...

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

参考文章:http://www.2cto.com/kf/201403/285613.html


  

android开发之onCreate( )方法详解

标签:android   activity   oncreate方法   详解   

原文地址:http://blog.csdn.net/u013149325/article/details/40899055

弹夹 正点 词典 彩条 容人 景气 食用油 修订 体式 两会 镂空 出价 木头 物理系 小龙 以后会 喜爱 能行 回答 限定版 国华 身体 岁末 环比 钟离 英勇 亮相 冰块 电子束 随心 咨询师 明心 回归 窄巷 进度 断掉 网上购物 压缩包 姜饼 飞升 发货 而成 寿命长 色弱 停留 涡流 下载速度 停飞 彩屏 借阅 片酬 香水 商店里 过年 求职简历 团聚 显达 错事 全系 成行 水货 长波 磁性材料 施救 钢价 隔音材料 仅能 石斑鱼 EnhancedFat 鸽子 安排 号牌 简单 生育 直条 罗定市 弹弓 案发 地面站 充数 命令 上了 完稿 丹尼尔 串连 渠道商 眼前 来电 下载链接 英国 发虚 洛夫 批注 正常运行 机车车辆 岱山 富士 晋江 电影票 门庭若市
资源来源网络,若未解决请查看原文

本文地址:https://www.heimacode.com/article/60383.html