zoukankan      html  css  js  c++  java
  • Android开发之onCreate

    最近看了一些开发人员做的APP开发,虽然都实现了比较完美的功能,不过很多地方很是牵强!我觉得:作为一个合格软件工程师,最重要的不是你写过多少代码,而是你研究过多少代码!所以,我更倡导多研究系统原本定制的一些APP,不然自己开发的时候会有很多雷区!

    今天,我们先说一个无处不在的函数:onCreate().。我们看看gogle是怎么解释他的:

    Called when the activity is first created. This is where you should do all of your normal static set up: create views, bind data to lists, etc. This method also provides you with a Bundle containing the activity's previously frozen state, if there was one.

    Always followed by onStart().

    这里我们只关注一句话:This is where you should do all of your normal static set up。其中我们只关注normal static,

    normal:常规的、通常的、一般的 。

    static:静态的,不变的。

    说的是:在这里我们需要做通常需要配置的信息,而不是真的所有的事情都在这里做。我们知道,一个activity启动回调的第一个函数就是onCreate。这个函数主要做这个activity启动的一些必要的初始化的工作,这个函数调用完后,这个activity并不是说就已经启动了,或者是跳到前台了。而是还需要其他的大量工作,我们知道:onCreate之后调用了还有onRestart()和onStart()等,实际上onStart()调用完毕了这个activity还没有完全启动,也只是前台可见,直到 onResume() 后这个onCreate才算终于启动。既然这样,那么在一个activity真正启动之前任何相当耗时的动作都会导致activity启动缓慢,特别是在onCreate里面耗时长的话可能照成严重的体验效果。

    我们来先看一个实例:

    	@Override
    	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

  • 相关阅读:
    hdu 5387 Clock (模拟)
    CodeForces 300B Coach (并查集)
    hdu 3342 Legal or Not(拓扑排序)
    hdu 3853 LOOPS(概率DP)
    hdu 3076 ssworld VS DDD(概率dp)
    csu 1120 病毒(LICS 最长公共上升子序列)
    csu 1110 RMQ with Shifts (线段树单点更新)
    poj 1458 Common Subsequence(最大公共子序列)
    poj 2456 Aggressive cows (二分)
    HDU 1869 六度分离(floyd)
  • 原文地址:https://www.cnblogs.com/H-BolinBlog/p/5494009.html
Copyright © 2011-2022 走看看