经过前面多天的了解,现在可以确信一点: activity提供了用户和程序交互的界面。
而且android里有四大组件:Activity,Service,BroadcastReceiver,ContentProvider.
Activity的使用,标准化流程大概如此:
- 继承android的Activity类
- 重写需要实现的方法
- 设置显示布局
- 在AndroidManifest.xml文件中,注册Activity
Activity的生命周期:
onCreate(); 创建
onStart(); 运行
onResume(); 获取焦点
onPause(); 失去焦点
onStop(); 暂停
onDestroy(); 销毁
onRestart(); 重新导航到活动
如下图:(自己手绘一遍,感觉清晰一点儿)
Activity的四种状态
- 活动状态 (Active / Running) ------Actitivy处于界面最顶端
- 暂停状态 (Paused) -----Activity失去焦点,但对用户可见
- 停止状态(不可见状态) ----Activity被完全遮挡,但保留所有状态和成员信息
- 非活动状态(killed) ------Activity被终止
创建 –> 销毁
onCreate() –> onStart() –> onResume() –> onPause() –> onStop() –>onDestroy()
从启动到后台,再到前台的生命周期
onCreate() –> onStart() –> onResume() –> onPause() –> onStop() –> onRestart() –> onStart() –>onResume()
(注意:这里的停止状态,activity被完全遮挡,但是保留所有状态和成员信息)
从启动到失去焦点,再到获取到焦点
onCreate() –> onStart() –> onResume() –> onPause() –>onResume()
玩一玩:
新建一个工程,只用改一改 MainActivity.java就可以了
package com.example.activitytest; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class MainActivity extends Activity { private String Tag = "tag"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.i(Tag, "onCreat()"); } @Override protected void onStart() { super.onStart(); Log.i(Tag, "onStart()"); } @Override protected void onResume() { super.onResume(); Log.i(Tag, "onResume()"); } @Override protected void onPause() { super.onPause(); Log.i(Tag, "onPause()"); } @Override protected void onStop() { super.onStop(); Log.i(Tag, "onStop()"); } @Override protected void onDestroy() { super.onDestroy(); Log.i(Tag, "onDestroy()"); } @Override protected void onRestart() { super.onRestart(); Log.i(Tag, "onRestart()"); } }
然后在LogCat中建立一个Filter
运行开始看Log
进行如下操作,切换一个Activity
此时画面为:
再点“返回”,即下图
此时回到手机主页面了,真的销毁了
我猜想,如果点击该activity如果弹出一个小的对话框,但是原来的activity还是可见的,那就会上演
onCreate() –> onStart() –> onResume() –> onPause() –>onResume()
总之先这样,如果以后发现不对的话,再来修改吧。