欢迎光临散文网 会员登陆 & 注册

Android Studio 开发之onCreate( )方法

2023-06-04 21:04 作者:XLongDD  | 我要投稿

Android Studio开发之onCreate( )方法详解

       onCreate()函数:用于activity初始化的时候。一般情况下,我们需在onCreate()中调用setContentView(int)函数填充屏幕的UI,通过findViewById(int)返回.xml文件中定义的视图或组件的ID。子类在重写onCreate()方法的时候必须调用父类的onCreate()方法,

即super.onCreate(),否则会抛出异常。

例(正确写法):

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

       但是,我们必须要注意的是,在onCreate()函数里我们需要配置一些必要的信息,但是并不是所有的事情都能在这里做。

        大家应该知道,一个activity启动调用的第一个函数就是onCreate(),onCreate()主要作用是:在activity启动时进行一些必要的初始化工作。而这个函数onCreate()调用完后,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 Studio 开发之onCreate( )方法的评论 (共 条)

分享到微博请遵守国家法律