回顾android Activity,突然发现我不懂了,有可能是我以前没想太多,现在来整理下吧;(孔子曾说过 温故而知新,可以为师矣)
Android 中最重要的是四大组件,即Activity、Service、ContentProvider和Broadcast。这4个组件分工明确,共同构成了可重用、灵活、低耦合的Android系统。
Activity负责UI元素的加载与页面之间的跳转,代表了一个页面单元;Swevice负责与ui无关的工作,如在后台执行耗时操作等;ContentProvider负责存储、共享数据,使得数据可以在多个应用之间共享;Broadcast则是各个组件、应用之间进行通信,简化了Android开发中的通信问题。
这里只讲Activity:
一、Activity介绍
Activity在大家看来显示用户界面,会加载一些UI元素与UI的交互,如:textview,edittext,listview,imageview等,还可以进行一些界面的跳转,共同完成特定的操作流程。每个应用都有一个或多个activity组成,它是App程序中不可缺少的一部分。
应用默认加载的Activity再AndroidManifest.xml中必须加上intent-filter
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android:intent.category.LAUNCHER"/>
</intent-filter>
二、Activity生命周期
1.onCreate()
它在Activity第一次被创建时调用,通常会在这个函数中完成activity的初始化操作,如:设置布局、初始化视图、绑定事件等。
2.onStart()
这个函数在activity的onCreate函数调用之后被调用,此时的Activity还处在不可见状态,它的下一个状态就是Activity变得可见的时候,也就是这个函数在Activity可见之前被调用。
3.onResume()
这个函数在Activity变为可见时被调用,执行完onResume之后,Activity就会请求AMS渲染它所管理的视图。此时的Activity一定位于返回栈的栈顶,并且处于运行状态。
4.onPause()
这个函数在系统准备去启动或者恢复另一个Activity时调用,也就是在Activity即将从可见状态变为不可见时。我们通常会在这个函数中将一些消耗CPU的资源放掉,以及保存一些关键数据。
5.onStop()
这个函数在Activity完全不可见时调用。它和onPause()函数的主要区别在于,如果新启动的Activity是一个对话框的Activity,那么onPause()函数会得到执行,而onStop()函数并不会执行。
6.onDetroy()
这个函数在Activity被销毁之前调用,之后Activity的状态将会变为销毁状态。
7.onRestart()
这个函数在activity由停止状态重新变为运行状态之前调用,也就是Activity被重新启动了。
三、Activity的构成
四、Activity的4种启动模式
1.standard(标准启动模式)
2.singleTop(节约模式)
3.singleTask(霸王餐模式)
4.singInstance(小灶模式)
五、FragmentActivity与Fragment
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" > </FrameLayout>
//隐藏fragment public void hideFragment(FragmentTransaction ft) { //如果不为空,就先隐藏起来 if (homeFragment != null) { ft.hide(homeFragment); } if (switchColumnFragment != null) { ft.hide(switchColumnFragment); } } //显示fragment public void showFragment(int index){ FragmentTransaction ft = getSupportFragmentManager() .beginTransaction(); hideFragment(ft); //注意这里设置位置 position = index; switch (index){ case FRAGMENT_ONE: if (homeFragment == null) { homeFragment = new HomeFragment(); ft.add(R.id.content_frame, homeFragment); } else { ft.show(homeFragment); } break; case FRAGMENT_TWO: if (switchColumnFragment == null) { switchColumnFragment = new SwitchColumnFragment(); ft.add(R.id.content_frame, switchColumnFragment); } else { ft.show(switchColumnFragment); } break; } ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); // ft.addToBackStack(null);//点击返回,会返回上一次的fragment ft.commitAllowingStateLoss();// 最后再提交 }这里注意:需要下面代码,防止切换横竖屏
@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); //屏幕旋转时记录位置 outState.putInt(HealthManagementActivity.POSITION, position); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { //屏幕恢复时取出位置 showFragment(savedInstanceState.getInt(HealthManagementActivity.POSITION)); super.onRestoreInstanceState(savedInstanceState); }