博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android(java)学习笔记112:Activity中的onCreate()方法分析
阅读量:5020 次
发布时间:2019-06-12

本文共 2194 字,大约阅读时间需要 7 分钟。

1.onCreate( )方法是android应用程序中最常见的方法之一:

     翻译过来就是说,onCreate()函数是在activity初始化的时候调用的,通常情况下,我们需要在onCreate()中调用函数填充屏幕的UI,一般通过返回xml中定义的视图或组件的ID。子类在重写onCreate()方法的时候必须调用父类的onCreate()方法,即super.onCreate(),否则会抛出异常

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

2.代码示例:

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

 

转载于:https://www.cnblogs.com/hebao0514/p/4737524.html

你可能感兴趣的文章
常用测试管理系统对比(测试用例、缺陷管理)
查看>>
树和森林v2.0 层次非递归创建树和森林,森林中的树不连
查看>>
设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
查看>>
欧拉函数求在1-n-1与n互质的个数
查看>>
yield的表达式形式的应用(待补充)
查看>>
fopen函数
查看>>
wpf键盘记录器
查看>>
依赖注入
查看>>
北师大历史系1965级2012同学聚会诗词汇集
查看>>
20155212——man指令的使用及mypwd的实现
查看>>
【WebGL系列】Typescript+WebGL+Webpack开发环境搭建
查看>>
IntentService下载任务
查看>>
1.8字符串- 翻转子串
查看>>
markdown基础
查看>>
Eclipse 快捷键
查看>>
红黑树 -- 增删查改
查看>>
关于网页的一些内容
查看>>
Lambda表达式详解
查看>>
用HashMap将两个嵌套循环拆成一个单循环
查看>>
IEC61131-3——数据类型
查看>>