文章目录

  • 1 @Override
  • 2 oncreate

1 @Override

@Override是伪代码,表示重写。(当然不写@Override也可以),不过写上有如下好处:
1、可以当注释用,方便阅读;
2、编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错。例如,你如果没写@Override,而你下面的方法名又写错了,这时你的编译器是可以编译通过的,因为编译器以为这个方法是你的子类中自己增加的方法。

举例:在重写父类的onCreate时,在方法前面加上@Override 系统可以帮你检查方法的正确性。
@Override
public void onCreate(Bundle savedInstanceState)

{…….}
这种写法是正确的,如果你写成:

@Override
public void oncreate(Bundle savedInstanceState)
{…….}
编译器会报如下错误:The method oncreate(Bundle) of type HelloWorld must override or implement a supertype method,以确保你正确重写onCreate方法(因为oncreate应该为onCreate)。

而如果你不加@Override,则编译器将不会检测出错误,而是会认为你为子类定义了一个新方法:oncreate

2 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 stubsuper.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 upupdateEnabledCard();}

这是一个APP的一个Activity的onCreate的写法。其实这段代码没有什么问题,而且看起来也是比较简单的代码。不过里面大量危险的代码段:不管是dataLoad = new DataLoading(); 还是 mSpeedDailDataMgr = new SpeedDailMgr(this);更或者是loadGripView();甚至updateEnabledCard();这么危险的处理都是不应该在这里来处理的。这里包含了加载数据库数据、读取文件信息、读取SIM卡信息,这些操作都是有可能抛出异常的,而且其操作耗时也是不确定的!对于面对这样问题,我觉得应该注意下面几个方面:

(1)在Activity启动前,尽量少做。

(2)对于布局比较复杂的时候,可以考虑不要一次性全部加载上,动态加载是一个好的办法。

(3)对于及时需要的数据,加载起来耗时的又有异常危险的,一定记得开辟一个线程来做这些动作,千万记得不要做阻塞主线程(UI线程)的任何事情。

(4)对于特殊情况下,Activity启动确实需要大量工作时候,可以考虑先加载一个简单的布局(或是Activity)来过渡.。

(5)所有的目的都是让你要启动的组件尽快上场,而不是以画好妆为主,这样的话客人会等不及的,顾客就是上帝。

Android移动开发之【Android实战项目】activity生命周期与Java中@Override的作用相关推荐

  1. Android关掉多个activity,Android应用开发之Android Activity栈管理 制定关闭某一个Activity,关闭所有Activit...

    本文将带你了解Android应用开发之Android Activity栈管理  制定关闭某一个Activity,关闭所有Activit,希望本文对大家学Android有所帮助. 系统Api :打开新的 ...

  2. android studio开发工具介绍,Android应用开发之Android开发工具介绍、Android Studio配置...

    本文将带你了解Android应用开发之Android开发工具介绍.Android Studio配置,希望本文对大家学Android有所帮助. 2.1   Android Studio配置 2.1.1 ...

  3. android final参数,Android应用开发之Android Jetpack-Navigation 使用中参数的传递方法

    本文将带你了解Android应用开发之Android Jetpack-Navigation 使用中参数的传递方法,希望本文对大家学Android有所帮助. 由于使用了Navigation,导致Frag ...

  4. 镜像处理坐标 android,Android应用开发之Android重写ImageView实现图片镜像效果的代码教程...

    本文将带你了解Android应用开发之Android重写ImageView实现图片镜像效果的代码教程,希望本文对大家学Android有所帮助. 前两天朋友问我一个问题,如何实现从手机系统相册加载一张图 ...

  5. android 函数返回string,Android应用开发之android 对话框对于返回值的处理方法

    本文将带你了解Android应用开发之android 对话框对于返回值的处理方法,希望本文对大家学Android有所帮助. android对话框是异步的,因此无法获得其返回值. 例如: 我们给出一个提 ...

  6. android中base64加密,Android应用开发之android自带Base64加密解密

    本文将带你了解Android应用开发之android自带Base64加密解密,希望本文对大家学Android有所帮助. android项目引用不到以下两个java类 import sun.misc.B ...

  7. android图片保存形式,Android应用开发之Android ScrollView截图和图片保存到相册的方式...

    本文将带你了解Android应用开发之Android ScrollView截图和图片保存到相册的方式,希望本文对大家学Android有所帮助. 1.1首先来看你一种截取屏幕,这种代码有缺陷,只能截取一 ...

  8. android 开发art,Android应用开发之Android 系统启动原理(art 虚拟机)

    本文将带你了解Android应用开发之Android 系统启动原理(art 虚拟机),希望本文对大家学Android有所帮助. Android   系统启动原理(art 虚拟机) 一.虚拟机的启动 A ...

  9. android 电量详情,Android应用开发之Android 8.0 电池-)耗电详情获取方法

    本文将带你了解Android应用开发之Android 8.0 电池-)耗电详情获取方法,希望本文对大家学Android有所帮助. Android 8.0 电池-)耗电详情获取方法 主要介绍UI位置和基 ...

最新文章

  1. 我的车模我做主 - 精美的车模作品
  2. Junos路由器静态路由及动态路由rip和ospf配置测试
  3. 回溯算法和贪心算法_回溯算法介绍
  4. linux 终端与shell输出大小不匹配
  5. iText5报表_页眉与页脚
  6. python语言发展历时_编程语言十年发展史
  7. arraylist插入数据_集合系列 List(二):ArrayList
  8. 打造Android微信朋友圈下拉刷新控件
  9. 《数据科学:R语言实现》—— 第1章 R中的函数 1.1 引言
  10. qt tabwidget 设置tab 位置_qml创建TabWidget的案例
  11. TeeChart7 在delphi7中的安装步骤
  12. PNG文件转YUV格式并实现播放
  13. win10 微信/QQ等能听到别人说话,别人听不到自己说话解决方案
  14. android shell打包
  15. windows端的MarginNote:BookxNote
  16. 2021C语言全套教程
  17. 1.17.Weblogic创建JMS服务
  18. VUE抽奖大转盘制作
  19. Linux基础系列修炼---笔记1
  20. 微信小程序_4,WXSS模板样式

热门文章

  1. 边缘检测算法及各自优缺点
  2. ubuntu 鼠标变成黑色的叉并且图标消失
  3. Flask 重复启动
  4. mkl gt;=2018
  5. python与caffe改变通道顺序
  6. opencv通道拆分与合并:split和merge
  7. 电子科技大学沙河计算机就业,电子科技大学沙河的几个软件工程有什么区别?...
  8. 主梁弹性模量计算_收藏 | 钢结构计算公式
  9. 昆山第二中等专业学校计算机分数线,昆山第二职业中学录取分数线
  10. linux程序接口实验,Linux程序接口实验:取进程标志及用户信息