007_Activity 翻译学习

Activity

官方:http://developer.android.com/reference/android/app/Activity.html

相关博客:

类信息: public class Activityextends ContextThemeWrapper implements ComponentCallbacks2 KeyEvent.CallbackLayoutInflater.Factory2 View.OnCreateContextMenuListener Window.Callback

直接子类:AccountAuthenticatorActivity,ActivityGroup,AliasActivity,ListActivity,FragmentActivity,expandableListActivity,NativeActivity,TestActivity

间接子类:ActionBarActivity,LauncherActivity, PreferenceActivity, TabActivity

继承结构: java.lang.Objectàandroid.content.Contextàandroid.content.ContextWrapperàandroid.view.ContextThemeWrapperàandroid.app.Activity

简介:

     一个Activity表示用户操作的一个专用的对象。几乎所有的activity都可以通过UI界面实现与用户的良好互动。大部分的activity是全屏的,但是也有其他形式,比如:悬浮窗体、通过activitygroup嵌入到其他的activity中。

    Activity生命周期中onCreate、onPause两个方法经常需要子类覆盖;

     应用中涉及到的所有Activity都需要在AndroidManifest.xml中注册。

主要从以下方面介绍Activity:

     1、Fragments  2、ActivityLifecycle  3、ConfigurationChanges  4、Starting Activitiesand 5、Getting Results  6、SavingPersistent State  7、Permissions  8、Process Lifecycle

开发引言:Activity类是一个应用整个生命周期内的一个重要部分,不同activity之间如何启动、关联是应用的基础框架。Application Fundamentals类、Tasks类和Back Stack类对android应用及activity有更加详细的介绍。

1、  Fragments

从android 3.0开始引入了Fragment,它可以帮助activity更加模块化代码,在大屏幕中实现更加复杂的用户操作,同时帮助应用更好的适配不同分辨率的屏幕。

2、  Activity lifecycle

系统中所有的Activity都被管理在一个activity堆栈中。当一个新的activity被创建,它将在这个栈的顶端成为唯一活动的activity,先前的activity则被压入栈中,直到栈顶的activity退出,先前的activity才会回到界面,成为活动的activity。

一个activity实际上有四个状态:

Ø  如果一个activity显示在屏幕最前端(栈顶),那么他正将激活并运行;

Ø  如过一个activity失去了焦点但是仍然可见(当一个非全屏的或者透明的activity在最顶端时),那么它处于暂停(paused)状态。一个暂停的activity仍然是存活的(它包含activity的全部状态和信息并且和windowmanager关联),但是在内存极度匮乏的时候也会被系统杀死。

Ø  如果一个activity已经完全被另一个activity覆盖,它将处于停止(stopped)状态。它仍然包含activity的全部状态和信息,这个activity已经不可见,它很可能在系统缺少内存的时候被杀死。

Ø  当activity进入暂停或停止状态,那么系统可能会杀死他,此时,系统可能会调用activity的destory方法也可能直接杀死整个进程(destory方法不被调用)。当这个activity重新显示时,他需要完全重启以恢复到之前的状态。

下图是一张经典的activity生命周期图:


三个需要注意的状态:

entire lifetime: 这个状态从onCreate开始,到onDestory结束。即activity的整个生命周期。我们可以在onCreate中配置状态而在onDestory中取消。比如我们在onCreate中启动一个后台线程下载数据,而在onDestory中停止这个线程。

visible lifetime: 这个状态从onStart开始,到onStop结束。activity处于这个状态时是可见的,但它不一定在最前端,不一定能完成用户交互。这个阶段我们应该处理一些状态以展现给用户。比如在onStart中启动注册一个广播,在有变化显示给用户,而在onStop中注销这个广播。当然,activity可能会在可见与不可见中切换,onStart、onStop方法就可能被多次成对调用。

foregroundlifetime:这个状态从onResume开始,至onPause结束。此时这个Activity处于activity栈的栈顶,可以与用户交互。由于activity可能频繁失去然后获得焦点,onResume和onPause就可能被多次执行,因此,在这两个方法里的操作应该是轻量级的。

Activity生命周期各方法介绍:

onCreate(Bundle)在activity创建时调用。这里我们需要完成所有的预配置工作:创建视图、绑定数据List等。此方法中的Bundle对象保存了这个Activity先前的状态,如果未保存则为null值。activity执行完这个方法后不可被系统杀死。   下一步:调用:onStart().

onStart():在activity界面将要显示而又没有显示的时候调用。activity执行完这个方法后不可被系统杀死。   下一步:如果activity显示到屏幕,则执行onResume,如果它被隐藏,则调用onStop。

onResume():activity界面已经显示并即将实现交互时执行。此时,activity处于activity栈的栈顶。activity执行完这个方法后不可被系统杀死。   下一步调用onPause。

onPause():当其他的activity将要显示的时候被调用。这个方法中应该关闭动画和其他消耗CPU的任务,同时应该保存activty中的必要数据,但是应该非常快速,不然下一个activity将无法显示。à在android 3.0以前,onPause()执行完以后,activity可能被系统杀死,因此我们必须在onPause中完成必要的数据保存;但是android 3.0以后,系统只能在onStop执行完以后才能杀死activity。   下一步:如果activity将重新回到前台,则调用onResume,如果activity不再。可见,则调用onStop。

onStop():当activity不再可见时执行。可能是已经被其他activity覆盖或者activity将被销毁。

   onStop()执行完后,activity可能被系统杀死。   下一步:如果系统将重新回到前台,则执行onReStart,如果activity即将销毁,则执行onDestory。

onReStart:当activity执行完onStop以后又将回到前台时执行。   onReStart执行完以后,activty不可被杀死。   下一步:执行onStart。

onDestory:这是activity生命周期的最后一步。它可能被主动调用finish()方法后执行,也可能是系统为了回收资源。可以通过在onPause方法体中通过isFinishing()方法区分。

配置变更事件

当设备的配置(在Configuration类中定义)发生变化时,系统采取一系列措施。activity可以对之进行处理。06_Handling Runtime Changes处理运行时配置改变》介绍了如何处理这些配置变更。

启动新Activty并获得返回结果

startActivity(Intent)可以启动一个Activty。

Activty可以通过startActivityForResult(Intent intent, int requestCode)启动一个新activity,并获得新activty返回的结果。

保存持久化数据

activty通常需要处理两种持久化数据:1、外部共享文档数据(通常是contentprovider,基于sqlite数据库)2、保存用户偏好数据,sharedPreferRence。

对于内容提供者(content provider),建议activity之间采用“edit in place”用户模型,这种模型的特点是用户的任何编辑操作会立即执行而不需要其他的确认步骤。一个简单的创建这种模型的方法需要遵循以下两个规则:

1、  当创建一个新文档时,它所依托的数据库或者简单文件也被立即创建。比如:当用户需要写一个新邮件,在用户真正输入邮件信息前,一个新的邮件条目应该被创建。这样,当用户离开现在的activity而前往其他activity时,这个邮件将出现在草稿列表中。

2、  当activity执行onPause方法时,所有的信息都应该被保存。这保证了这些信息可以被其它相关activity查看到。

这个模型可以防止在activity之间切换时数据的丢失,并且在系统杀死activity时也能保证数据安全。需要注意的是:系统默认点击返回按钮代表离开activity,而不是取消操作。因此如果我们需要恢复或撤销一次编辑,应该改提供其它的机制。

ContentProvider类详细介绍了如何在不同activity之间共享数据。

系统提供了用于保存与activity关联数据的API,采用SharedPreferences的方式。它可以用来保存用户的偏好设置、组件的状态等。在activity启动时通过获得这个文件来恢复这些状态。

权限

就像我们启动一个activity需要在androidmanifest中注册一样,应用所需要的权限,比如网络访问、sd卡读写也需要在androidmanifest中通过<uses-permission>节点注册。

当然,我也可以在程序中动态地赋予activity一定的权限,比如读取网络数据权限:Intent.FLAG_GRANT_READ_URI_PERMISSION。 Securityand Permissions 提供了更加详细的介绍。

进程生命周期

android系统希望保持应用进程存活尽可能长的时间,但是当设备内存过低时,我们仍然需要去移除旧的进程。就像在activity中描述的那样,具体移除哪一个进程取决于用户的操作。通常,按重要性将进程分为以下四个状态,在内存吃紧的情况下,系统会首先杀死最不重要的那一个进程:

1、 前台activity(在屏幕最顶端,用户正与之操作):这被认为是最重要的activity,它所在的进程只会是最后一个被杀掉,当它占用了过多内存时。这个时候设备内存占用通常已经达到了它的瓶颈,因此它将被杀死,以保证它能够响应用户的操作。

2、 可见的activity(可见但是并不在屏幕最顶端,最顶端可能是一个dialog样式的activity,或则最顶端有透明的部分使得它的下一层actiivty仍然可见)这个actiivty被认为时特别重要的,它只会在系统为了保证最顶端activity运行而不得不杀死它的时候才会被杀死。

à一个由activity产生的真正的dialog显示在屏幕时,由于它的上下文仍是activity的上下文context,因此这个dialog所在的activity被认为是在最顶端的。

3、 后台activity(activity不再可见并且被暂停):它已经不在重要,系统可能会安全地杀掉它以回收内存。当它的进程被杀掉以后,如果用户再次导航到这个activity(让它重新在屏幕上显示),那么activity的onCreate(BundlesavedInstanceState) 方法将被调用,并利用之前在onSaveInstanceState(Bundle)中保存的savedInstanceState来将它恢复到之前的状态。

4、 空进程(进程不持有activity或则其它组件,如服务和广播):在系统内存低的时候它将会很快被杀掉。由于这个原因,一个后台的操作应该在一个activity、Service或BroadcastReceiver的上下文context中执行,以保证系统知道它的重要性。

有时一个activity可能需要执行一个耗时操作,但是需要这个操作独立于这个activity的生命周期。比如一个相机应用需要将照片上传到web 服务器中,这个上传过程可能需要一段长时间,但是这个过程我们可能需要退出这个应用。为了完成这个,我们可以开启一个Service服务用来上传。系统将认为这个服务进程比其他的不可见进程具有更高的优先级。这个服务器进程也会与原actiivty进程的生命周期无关。

公共方法

1、public void addContentView(View view, ViewGroup.LayoutParams params)

给activity添加一个附加的View。已加入的View并不移除。 

2、public voidcloseContextMenu ()

关闭一个最近打开的Context menu,如果它正在显示。 可能存在多个Context Menu。

3、public voidcloseOptionsMenu ()

关闭Option Menu。如果Option menu已经关闭,则什么也不做。

4、public PendingIntent createPendingResult(int requestCode, Intent data, int flags)

PendingIntent:待处理的Intent。   用于非立即执行的intent;比如在通知Notification中用于跳转页面,但不是马上跳转。而Intent 是及时启动,intent 随所在的activity 消失而消失。

创建一个PendingIntent,他使得你可以将这个intent交给其他对象对象去处理,然后通过onActivityResult(int, int,Intent)回掉方法返回结果。这个PendingIntent对象可以通过flags指定是一次有效还是可多次使用。

requestCode:请求号,它会与结果数据绑定。它不可被修改,以使得你可以通过它识别返回结果。

data:默认提交的数据,可以被修改

flags:可能是PendingIntent.FLAG_ONE_SHOT,PendingIntent.FLAG_NO_CREATE, PendingIntent.FLAG_CANCEL_CURRENT,PendingIntent.FLAG_UPDATE_CURRENT或者是Intent.fillIn()提交的其他flags。

返回值:返回一个已存在的或则是新建的PendingIntent对象。当flag为PendingIntent.FLAG_NO_CREATE时,则返回NULL。

5、 public boolean dispatchXXXEvent (XXXEvent event)

这类方法是进程对这些事件的处理。通过重写这类方法,我们可以在事件传递给窗体之前,自己处理这些事件,并通过返回值确定是否向下一级继续传递这事件。true表示事件被消费,不继续传递;false则继续传递事件。

àXXX代表的事件:GenericMotionEvent、KeyEvent、KeyShortcutEvent、PopulateAccessibilityEvent、TouchEvent、TrackballEvent。

6、public void dump (Stringprefix, FileDescriptor fd, PrintWriter writer, String[] args)   add in android 3.0

将activity状态写入一个给定的输入流。(具体不清楚)

6、 public View findViewById (int id)

通过id找到一个View。这个View的id是在setContentView中导入的View布局中指定的。

7、 public void finish ()

当需要关闭这个Activity时调用。在这之前可以调用setResult方法,这样在finish时,启动这个activity的上一级Activity的onActivityResult()就可以收到返回的结果。

8、 public void finishActivity (int requestCode)

强制关闭一个你之前启动的Activity。requestCode是在startActivityForResult(Intent, int requestCode)中定义的。如果这个requestCode匹配了多个Activity,那么它们都会被关闭。

9、 public void finishActivityFromChild (Activity child, int requestCode)

这是在子Activity调用finishActivity(int requestCode)方法时被调用的。

10、public void finishAffinity()   add in android 4.1.1

关闭当前进程中所有与当前activity相关联的activity包括自己。àactivity可以启动新的activity,这样形成一个activity栈,点击返回按钮,会从栈中取出一个activity显示。本例示范如何点击一个按钮后,所有栈中的activity都一起退出,而不是仅退出当前activity。

11、public voidfinishAfterTransition ()   add in android5.0

完成进入动画和退出动画以后立即调用finish()。如果没有进入动画,则立即调用finish()并运行退出动画。

12、public voidfinishAndRemoveTask ()   add in android5.0

在关闭activity时完全关闭它所在的整个进程。

13、public void finishFromChild(Activity child)

在子activity调用finish()时,这个方法被调用。默认的实现就是简单的调用finish().即父activity也关闭自己。

14、public ActionBargetActionBar ()

返回这个activity的ActionBar的引用。

15、public final ApplicationgetApplication ()

返回activity所在的Application的引用。

16、public ComponentNamegetCallingActivity ()

返回启动这个activity的父activity的名字。就是setResult()设置的结果需要传递给的对象。这可以用来验证是否应该向该父activity传递这个结果。

à如果父activity并不期待获得这个结果,即不是采用startActivityForResult(Intent,int)方法启动的子activity,将返回null。

17、public StringgetCallingPackage ()

返回启动这个activity的包名。与getCallingActivity ()类似。

à如果父activity并不期待获得这个结果,即不是采用startActivityForResult(Intent,int)方法启动的子activity,将返回null。

à在android4.3之前,这个方法返回的结果是不稳定的。如果持有这个包的进程已经关闭,它将返回null。因此,采用getCallingActivity ()是更好的办法(它包含包名的)。

18、public intgetChangingConfigurations ()

当activity因为无法处理的配置改变而被销毁时(onConfigurationChanged(Configuration)不被调用),可以通过这个方法去查看究竟是什么配置变化引起了进程被销毁。但是这个结果并不一定准确,因为其他的配置改变随时都有可能发生,它只能用来作为参考。

返回值:返回的参数在Configuration类中定义。

19、public ComponentNamegetComponentName ()

返回当前activity的完整名称。

20、public ScenegetContentScene ()   add in android5.0   不懂

21、public TransitionManagergetContentTransitionManager ()   add inandroid 5.0   不懂

22、public View getCurrentFocus()

返回activity中当前获得焦点的View.

23、public FragmentManagergetFragmentManager ()

返回关联的FragmentManager

24、public Intent getIntent ()

返回启动这个activity的intent

25、public LayoutInflater getLayoutInflater()

LayoutInflater用来找layout下xml布局文件并实例化。对应的findViewById()用来找一个具体的组件并实例化。

26、public LoaderManagergetLoaderManager ()

返回这个activity的LoaderManager。   add in android 3.0

27、public StringgetLocalClassName ()

返回activity类名。不含包名。

28、public final MediaControllergetMediaController ()

返回用来接收媒体事件与音量事件的MediaController。

29、public MenuInflatergetMenuInflater ()

返回MenuInflater。MenuInflater与LayoutInflater类似。但是MenuInflater是用来加载菜单布局的。

30、public final ActivitygetParent ()

如果这个activity是一个嵌入的activity,则返回它的父activity。如一个TabActivity

31、public IntentgetParentActivityIntent ()   add inandroid 4.3

获得一个启动activity的明确的逻辑父Activity的intent。这个逻辑父Activity是在manifest中由parentActivityName属性指定的。可以覆盖它以实现自定义机制。

32、public SharedPreferencesgetPreferences (int mode)

返回SharedPreferences对象。它就是调用getSharedPreferences(Stringname, int)方法,其中name被指定为activity的类名。

33、public intgetRequestedOrientation ()

获得当下屏幕方向。

34、public ObjectgetSystemService (String name)

根据name名称返回对应的对象。

WINDOW_SERVICE ("window")-------------------------------WindowManager

LAYOUT_INFLATER_SERVICE("layout_inflater")-------------------------------LayoutInflater

ACTIVITY_SERVICE ("activity”)-------------------------------ActivityManager

POWER_SERVICE ("power”)-------------------------------PowerManager

ALARM_SERVICE ("alarm”)-------------------------------AlarmManager

NOTIFICATION_SERVICE("notification”)-------------------------------NotificationManager

KEYGUARD_SERVICE ("keyguard”)-------------------------------KeyguardManager

LOCATION_SERVICE ("location”)-------------------------------LocationManager

SEARCH_SERVICE ("search”)-------------------------------SearchManager

VIBRATOR_SERVICE ("vibrator”)-------------------------------Vibrator

CONNECTIVITY_SERVICE ("connection”)-------------------------------ConnectivityManager

WIFI_SERVICE ("wifi”)-------------------------------WifiManager

WIFI_P2P_SERVICE ("wifip2p”)-------------------------------WifiP2pManager

INPUT_METHOD_SERVICE("input_method”)-------------------------------InputMethodManager

UI_MODE_SERVICE ("uimode”)-------------------------------UiModeManager

DOWNLOAD_SERVICE ("download”)-------------------------------DownloadManager

BATTERY_SERVICE ("batterymanager”)-------------------------------BatteryManager

JOB_SCHEDULER_SERVICE ("taskmanager”)-------------------------------JobScheduler

35、public int getTaskId ()

返回当前所在进程Id号。

36、public final intgetVolumeControlStream ()

活得建议的音频流。它的音量受硬件控制。

37、public Window getWindow ()

返回activity当前的window。这个可以用来直接调用Window的api方法,而这些方法可能无法直接通过activity调用。

38、public WindowManagergetWindowManager ()

39、public booleanhasWindowFocus ()

如果activity的主窗体获得焦点,则返回true。这和view获得焦点不同。

40、public voidinvalidateOptionsMenu ()   add in android3.0

    表示OptionMenu已经改变,它需要重建。onCreateOptionsMenu(Menu)将在下一次显示OptionMenu时被调用。

41、public booleanisChangingConfigurations ()   add inandroid 3.0

查看activity所在的进程是否正在被销毁以适配新的配置。这经常被用在onStop中去决定是否状态需要清理或则需要传递给新建的activity对象。

42、public final booleanisChild ()

判断当前activity是否被嵌入到另一个activity中。

43、public boolean isDestroyed ()

表示onDestory()已经执行,这个activity已经死了。

44、public boolean isFinishing()

查看当前activity是否将要被关闭。一般在onPause中判断究竟是简单的暂停还是关闭。

45、public boolean isImmersive()   add in android 4.3

Immersive翻译:身临其境。表示用户是否正专注于在这个activity操作。

说明这个activity是否应该被通知中断。可以在manifest中android:immersive指定。也可以通过setImmersive(boolean)设置。

46、public boolean isTaskRoot()

判断这个activity是否是这个进程的根节点,即进程的第一个activity。

47、public booleanmoveTaskToBack (boolean nonRoot)

是否将activity所在进程移至后台。

参数:nonRoot为false的时候,这条命令只在该activity作为根结点的时候才有用;为true的时候表示进程中的任何一个activity都可以起作用。

返回值:这个进程被移入后台或者已经在后台则返回true

48、public boolean navigateUpTo(Intent upIntent)   add in android 4.1.1

导航当前activity到upintent指定的activity,并在进程中关闭当前activity。如果指定activity已经存在与进程的历史记录中,当前activity和所有指定activity之前的activity都将被销毁。   如果指定activity并不存在于进程历史中,将会销毁所有activity直到到达根activity。   这在actiivty之间有一个完整的结构时是非常有用的。

这个方法应该用在进程内的向上导航。进程间的向上导航可以通过shouldUpRecreateTask(Intent)方法。

参数:upIntent   代表指定activity

返回值:如果导航成功则返回true。如果未找到指定activity则返回false。

49、public booleannavigateUpToFromChild (Activity child, Intent upIntent)   add in android 4.1.1

这个方法在子activity调用navigateUpTo(upIntent)时被调用。默认的实现就是父activity简单地调用navigateUpTo(upIntent)方法。

50、public voidonActionModeFinished (ActionMode mode)  add in android 3.0

ActionMode:新的创建菜单的一种方式。

ActionMode关闭时调用。子类覆盖时必须调用父类的实现。

51、public voidonActionModeStarted (ActionMode mode)

ActionMode打开时调用。子类覆盖时必须调用父类的实现。

52、public voidonActivityReenter (int resultCode, Intent data)   add in android 5.0   不懂

53、public voidonAttachFragment (Fragment fragment)  add in android 3.0

当一个Fragment关联到这个Activity时触发。在Fragment.onAttach()与Fragment.onCreate()之间。

54、public voidonAttachedToWindow ()

当Activity的主窗体关联到WindowsManager时调用。

55、public void onBackPressed()

就是返回按钮点击事件。默认的实现是关闭这个activity,我们可以覆盖。

56、public voidonConfigurationChanged (Configuration newConfig)

在设备配置发生改变时被调用。à需要注意的是,这个方法只会在manifest文件中明确指定的需要自己处理的配置改变才会被调用。   否则,系统只会直接这个activity。

newConfig对象中不仅包含变化的配置,其他未变化的也可以找到。

57、public voidonContentChanged ()

这会在经过调用Window.setContentView orWindow.addContentView改变屏幕内容时被调用。

58、public booleanonContextItemSelected (MenuItem item)

context menu中item被选择是触发这个事件。可以通过getMenuInfo()方法活得更多关于menu的信息。

返回值:返回true,表示选择事件被消费,不继续传递;返回false则继续传递。

59、public voidonContextMenuClosed (Menu menu)

在Context Menu关闭时调用。

60、public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState)   add in android 5.0

和onCreate(android.os.Bundle)相同,但是多了一个persistentState参数。

persistentState:包含activity上一次关闭时由onSaveInstanceState(Bundle)保存的数据。

persistentState:包含activity上一次关闭或者断电时,由onSaveInstanceState(Bundle)保存的数据。

61、public voidonCreateContextMenu (ContextMenu menu,View view,ContextMenu.ContextMenuInfo menuInfo)

在每一次显示context menu时都被调用。而onCreateOptionsMenu(Menu)只会调用一次。

onContextItemSelected(android.view.MenuItem)可用于监听每一次菜单子项选择事件。

在这个方法返回后继续持有这个Context Menu对象是不安全的。

参数:menu:正在创建的ContextMenu对象

view:正在创建的ContextMenu的View

menuInfo:关于具体显示那一个context menu的额外信息。这些信息依赖于具体的view。

62、public CharSequenceonCreateDescription ()

关于activity的描述。这个方法在activity暂停前被调用。默认的实现返回空值。如果所有的activity都返回空值,最顶端的activity的label将作为描述。

返回值:关于用户正在操作的内容的描述。应该间断直接。

63、public voidonCreateNavigateUpTaskStack (TaskStackBuilder builder)  add in android

4.1.1   不懂

64、public booleanonCreateOptionsMenu (Menu menu)

实例化OptionsMenu。可以将菜单子项的定义放在menu文件中。

它只在OptionsMenu第一次显示时被调用。每一次更新它,需要通过onPrepareOptionsMenu(Menu)。

默认的实现采用标准的系统菜单填充。派生类应该调用这个基本实现。

我们可以安全地持有这个菜单及其子项,对他进行修改,直到下一次onCreateOptionsMenu()被调用。

可以实现onOptionsItemSelected(MenuItem)去处理子项选择事件。

返回值:如果要显示OptionsMenu,必须返回true;返回false将不会显示它。

65、public booleanonCreatePanelMenu (int featureId, Menu menu)

onCreatePanelMenu()会在onCreateOptionsMenu()之前触发,若存在onCreatePanelMenu()则onCreateOptionsMenu()不会被触发。  资料很少。

66、public booleanonCreateThumbnail (Bitmap outBitmap, Canvas canvas)

Thumbnail翻译:缩略图

创建一个activity的缩略图,这个方法会在activity暂停前调用。

默认的实现并不生成缩略图,因此返回false。

67、public View onCreateView(View parent, String name, Context context, AttributeSet attrs)

标准的实现是通过getSystemService("layout_inflater")返回一个LayoutInflater用于实例化一个布局为View。这个实现处理这些标签以嵌入fragments到activity。

68、public voidonDetachedFromWindow ()

当与activity绑定的主窗体与windowsManager脱离时触发。

69、public voidonEnterAnimationComplete ()   add inandroid5.0

当进入动画完成时被调用。

70、public booleanonGenericMotionEvent (MotionEvent event)

当一个MotionEvent没有被处理的时候调用。在View类中有详细介绍。

71、public boolean onKeyDown(int keyCode, KeyEvent event)

当按键按下且这个事件没有被处理的时候调用。

72、public booleanonKeyLongPress (int keyCode, KeyEvent event)

73、public booleanonKeyMultiple (int keyCode, int repeatCount, KeyEvent event)

74、public booleanonKeyShortcut (int keyCode, KeyEvent event)  add in android 3.0

75、public boolean onKeyUp (intkeyCode, KeyEvent event)

76、public void onLowMemory ()

在系统内存极度匮乏是调用。此时所有后台进程都已经被杀死,我们需要实现这个方法,清除持有的那些不必要的资源和缓存,以保持activity继续存活。系统将执行垃圾回收器回收这些资源。

在android 4.0及以上,推荐使用onTrimMemory(int)。

77、public boolean onNavigateUp()

当需要从action bar向上导航时调用。

78、public booleanonNavigateUpFromChild (Activity child)

当它的子activity准备向上导航时调用。默认的实现只是简单的调用onNavigateUp()。

79、public booleanonPrepareOptionsMenu (Menu menu)

在每次OptionsMenu显示的时候都调用。可以在这个方法中使能菜单子项或者动态修改这些内容。

默认的实现基于activity的状态更新菜单项。派生类需要调用默认的实现。

80、public voidonSaveInstanceState (Bundle outState, PersistableBundle outPersistentState)   add in android 5.0

outPersistentState:在重启的时候保存状态。

81、public booleanonSearchRequested ()

82、public boolean onTouchEvent(MotionEvent event)

当touch事件发生且没有被View消费时这个方法被调用。

如果希望这个事件继续传递,则返回false,否则,返回true。

83、public void onTrimMemory(int level)   add in android 4.0

当操作系统觉得应该移除不需要的内存时被调用。比如在activity进入后台时、内存不够时。Level表示内存使用状态,判断时,不应该按照具体的值去执行操作。只需要区分一个你感兴趣的区域就可以了。在任何时候,都可以通过调用ActivityManager.getMyMemoryState(RunningAppProcessInfo)获得当前的内存使用状态。

84、public voidonUserInteraction ()

在一个按键点击事件、触摸事件、滚动球事件(trackball event)被分发给activity时都会调用此方法。实现这个方法可以知道用户正在进行操作。这个回调与onUserLeaveHint()方法致力于智能化管理状态栏通知,特别是帮助activity在正确的时间去取消一个通知。

所有调用onUserLeaveHint()方法都是通过调用onUserInteraction()来完成的。这保证了在拉下通知栏并触摸一个子项时activity都能知道。

需要注意的是,onUserInteraction()只会在touch down事件发生时调用,在touch-moved 和touch-up时却不会调用。

85、public voidonVisibleBehindCanceled ()   add inandroid 5.0

当这个activity被一个半透明activity覆盖,并且这个半透明activity正逐渐不透明时,或者另外一个activity正在启动时,这个方法将被调用。

子类覆盖这个方法时,必须调用super.onVisibleBehindCanceled(),否则将抛出异常SuperNotCalledException。

当这个方法被调用时,activity在后台将有500毫秒的时间释放它可见时所使用的所有资源,此后,onStop将被调用。如果activity没能在500毫秒内返回,系统将销毁这个activity和它所在的进程以为其它进程提供资源。

86、public void onWindowAttributesChanged(WindowManager.LayoutParams params)

当前窗体属性发生变化时被调用。

87、public abstract voidonWindowDismissed ()

当一个窗体消失时调用。

88、public voidonWindowFocusChanged (boolean hasFocus)

当activity当前的窗体获得或失去焦点时被调用。这是这个activity是否可见的最好指示器。默认的实现应该始终被调用。

需要注意的是,这个方法提供全局焦点状态信息,它是由activity的生命周期独立管理的。因此,焦点状态的改变和activity生命周期的变化一般是有关系的(一个处于“stopped”状态的activity是不会获得焦点的),你不应该依赖于任何具体的命令。

一个通用的规则是,一个“resumed”状态的activity将获得焦点,除非它显示了其它dialog或者悬浮视图,当其他窗体获得焦点时这个窗体就不会获得焦点。同样,当一个系统级的窗体显示时,这个activity将失去焦点,但它并不会被暂停。

89、public ActionModeonWindowStartingActionMode (ActionMode.Callback callback)   add in android 3.0

ActionMode:新的创建菜单的方式

使activity有机会控制一个系统请求的ActionMode菜单的View。

注意:如果需要获得这个activity的ActionMode启动的回调通知,可以采用onActionModeStarted(ActionMode)。

90、public void openContextMenu(View view)

为特定的view打开它的context menu。这个view应该已经通过registerForContextMenu(View)注册。

91、public void openOptionsMenu()

打开OptionsMenu。如果OpionsMenu已经打开,那么这个方法不起作用。

92、public voidoverridePendingTransition (int enterAnim, int exitAnim)

在startActivity(Intent)或者finish()执行后马上被执行。

从android 4.1开始,我们也可以通过ActivityOptions类对象添加至Bundle,然后通过startActivity(Intent,Bundle)来指定一个动画。

93、public voidpostponeEnterTransition ()   add inandroid 5.0

当activity是通过makeSceneTransitionAnimation(Activity,android.util.Pair[])启动时,则使进入动画延时。

这个方法使activity能够使进入动画延时,直到所有的数据已经加载完毕。加载完数据之前,activity不会绘制它的窗体,而将其保持透明。它也会在返回动画显示时起到同样的作用。   这个方法应该在onCreate(android.os.Bundle)或者onActivityReenter(int,android.content.Intent)中调用。   当数据准备完毕时,应该调用startPostponedEnterTransition()方法,以加载进入动画。   如果activity不是通过makeSceneTransitionAnimation(Activity,android.util.Pair[])启动的,则这个方法不起作用。

94、public void recreate ()   add in android 3.0

重建一个新对象。   这个实际上和配置改变时activity重启的效果是一样的。这个activity将执行onDestory()方法然后重建一个新对象。

95、public voidregisterForContextMenu (View view)

给view注册一个context menu。这个方法将会替这个view创建View.OnCreateContextMenuListener,当需要显示context menu时,onCreateContextMenu(ContextMenu,View, ContextMenuInfo)将会被调用。

96、public booleanreleaseInstance ()   add in android 5.0

销毁activity当前对象以释放内存,但是当用户当行回来的时候,这个activity会被重建。

返回值:如果已经启动一个进程来销毁当前的activity对象则返回true。否则返回false,可能的原因包括:activity当前是可见的;activity正在被销毁;activity正在关闭,activity还没来得及保存它的状态等等。

97、public voidreportFullyDrawn ()   add in android 4.4

报告系统说明应用已经绘制完毕,这仅仅是作为诊断(调用它并不代表activity可见)。

这只是用来帮助测量应用的启动时间,使得应用可以报告它已处于可用状态。没有这个方法的时候,系统只能知道窗体开始绘制以及窗体已经显示。   我们可以在onCreate(Bundle)被调用后执行这个方法,这个时候已经绘制完UI。我们也可以在onCreate(Bundle)之后的任意时刻调用这个方法,它会被自动忽略。

98、public booleanrequestVisibleBehind (boolean visible)  add in android 5.0

如果activity希望在被一个半透明的activity覆盖的时候继续显示,就需要在onResume和onPause之间调用这个方法。   如果调用成功,在activity调用onPause后,它将继续显示,并且可以继续在后台播放媒体。

在这个activity重新回到前台时,requestVisibleBehind(boolean visible)的请求就会失效,如果希望下一次继续在后台显示,就需要再次调用这个方法。

仅仅不透明且全屏的activity需要调用这个方法。对于dialog或者半透明的activity,它不起作用。

当这个方法返回false或者onVisibleBehindCanceled()被调用时,这个activity必须停止播放并且释放资源。

99、public final booleanrequestWindowFeature (int featureId)

使窗体可用。   这是一个遍历方法,也可以通过getWindow().requestFeature()实现。

featureId在Window类中定义。

100、public final voidrunOnUiThread (Runnable action)

     在UI线程中运行这个操作。如果当前正在UI线程中,则这个操作将立即执行;否则,这个操作会被加入到UI线程队列中。

101、public void setActionBar(Toolbar toolbar)   add in android 5.0

将一个Toolbar作为ActionBar加入到activity窗体中。

当toolbar非空时,getActionBar方法将返回ActionBar对象,这个返回对象可以想控制action bar一样控制这个toolbar。这个toolbar的菜单会被关联到activity的options menu,它的导航按钮与标准菜单选择操作是一样的。

将ToolBar加入activity的窗口必须不能请求窗体Action Bar功能。

102、public voidsetContentTransitionManager (TransitionManager tm)   add in android 5.0

103、public void setContentView(View view)

     public void setContentView (int layoutResID)

     public void setContentView (View view,ViewGroup.LayoutParams params)

     设置activity的视图。

104、public final voidsetDefaultKeyMode (int mode)

设置对未处理按键事件的默认响应模式。

105、public voidsetEnterSharedElementCallback (SharedElementCallback callback)   add in android 5.0

当使用makeSceneTransitionAnimation(Activity,android.view.View, String)启动activity时,这个回调将被调用以处理SharedElement。要求获得功能:FEATURE_ACTIVITY_TRANSITIONS。

public voidsetExitSharedElementCallback (SharedElementCallback callback)类似。

106、public final voidsetFeatureDrawableXXX (int featureId, Drawabledrawable)

调用Window. setFeatureDrawableXXX()的便捷方法。

107、public voidsetFinishOnTouchOutside (boolean finish)  add in android 3.0

设置当触摸到窗体外时是否关闭activity。

108、public void setImmersive(boolean i)   add in android 4.3

Immersive翻译:身临其境

设置是否免打扰。   需要注意的是,设置这个并不会改变ActivityInfo中的信息,即如果已经在manifest文件中设置过android:immersive,ActivityInfo.flags就不会再改变。

109、public void setIntent(Intent newIntent)

改变getIntent()返回的intent。它持有这个intent的引用,但并不复制它。   这个方法经常与onNewIntent(Intent)一起使用。

110、public final voidsetMediaController (MediaController controller)   add in android 5.0

设置一个MediaController,用来发生媒体命令,改变音频。

111、public final voidsetProgress (int progress)

设置title中progress bar的进度。

要显示progress bar,应该请求功能:requestWindowFeature(int)。

112、public final voidsetProgressBarIndeterminate (boolean indeterminate)

设置横向progress bar是否是不定的。即循环效果。   环形progress bar始终是不定的。

113、public final voidsetProgressBarIndeterminateVisibility (boolean visible)

设置这个不定状态的progress bar是否可见。

114、public final voidsetProgressBarVisibility (boolean visible)

设置progress bar是否可见。

115、public voidsetRequestedOrientation (int requestedOrientation)

改变activity横竖屏方向。

116、public final void setResult(int resultCode)

public final void setResult (intresultCode, Intent data)

调用这个方法将结果返回给activity的启动者。

从android 2.3开始,intent中可以设置Intent.FLAG_GRANT_READ_URI_PERMISSION和Intent.FLAG_GRANT_WRITE_URI_PERMISSION,使得启动者可以根据给定的网络地址获得结果。

117、public final voidsetSecondaryProgress (int secondaryProgress)

为title中的progress bar设置二级进度。

118、public voidsetTaskDescription (ActivityManager.TaskDescription taskDescription)   add in android 5.0

119、public void setTitle (inttitleId)

     public void setTitle (CharSequence title)

     改变这个activity的title。如果这个activity是一个嵌入的activity,那么它的父activity可以决定想改变的任何内容。

120、public void setVisible(boolean visible)

控制activity的主窗体是否可见。这只用在特别的情况,不希望显示它的UI,但是也不能在onResume之前关闭activity因为他需要等待与一个service服务绑定。

121、public final voidsetVolumeControlStream (int streamType)

设置当activity处于前台时音量控制键所控制的音频流类型。

比如activity包含音乐或视频播放时,就需要把它绑定到媒体流。

但是如果用户正在接听电话,那么音量键控制的就是电话的音量。

122、public booleanshouldUpRecreateTask (Intent targetIntent)  add in android 4.1  

官方文档这个地方有错。

targetIntent包含向上导航的目标地址信息。如果这次向上需要重建一个新的进程则返回true;如果目标地址就在当前进程,则返回false。

当返回false的时候,就是简单的调用navigateUpTo(Intent);如果返回true,就需要创建一个新进程,可以通过TaskStackBuilder或其它相似的机制。

123、public ActionModestartActionMode (ActionMode.Callback callback)  add in android 3.0

124、public void startActivities(Intent[] intents, Bundle options)   addin android 4.1

启动一系列新activity(intents数组,每个intent代表启动一个activity)。当这个activity退出的时候,原activity不会收到任何信息。

这个方法比基础方法提供了一个附加信息,因此不必提供“FLAG_ACTIVITY_NEW_TASK”启动标识,如果没有特别制定,这个activity将被添加到原activity的进程中。

如果指定的activity没有找到,将抛出异常ActivityNotFoundException。

public void startActivity (Intentintent, Bundle options)   仅启动一个新activity。

125、public void startActivities(Intent[] intents)   add in android 3.0

和startActivities (Intent[]intents, Bundle options)一样,缺省了options。

126、public void startActivity(Intent intent)

与startActivity (Intentintent, Bundle options)相同,缺省options。

127、public voidstartActivityForResult (Intent intent, int requestCode , Bundle options)   add in android 4.1

与startActivity (Intentintent, Bundle options)类似。   但是这个方法希望在子activity关闭时获得子activity返回的结果。   子activity关闭时,原activity中onActivityResult()将被调用。

需要注意的是,这个方法中的intent应该处于一个被设计为需要返回结果的intent 池中,否则,可能我们得不到期望的结果。例如,如果启动的是一个“singleTask”启动模式的activity,那么它不会和原activity在同一个进程中运行,因此,原activity将会马上收到一个“取消”的结果。

特别地,如果我们在onCreate或onResume中调用此方法,那么原activity将不会显示,直到子activity返回结果。

128、public void startActivityFromChild(Activity child, Intent intent, int requestCode, Bundle options)   add in android 4.1

这个方法将会被调用,当子activity调用它的startActivity(Intent)或startActivityForResult(Intent,int)方法时。à即子activity启动一个新activity是依赖于原activity的。

public void startActivityFromChild(Activity child, Intent intent, int requestCode)类似。

129、public voidstartActivityFromFragment (Fragment fragment, Intent intent, int requestCode,Bundle options)   add in android 4.1

当activity中的fragment调用它的startActivity(Intent)或startActivityForResult(Intent,int)方法时,这个方法被调用。

public void startActivityFromFragment(Fragment fragment, Intent intent, int requestCode)类似。

130、public booleanstartActivityIfNeeded (Intent intent, int requestCode, Bundle options)   add in android 4.1

public boolean startActivityIfNeeded(Intent intent, int requestCode)类似。

这是启动activity的一个特别方法。它和startActivityForResult(Intent,int)是一样的,但是,如果以下情况:intent表示的activity就是原activity、“singleTask”、“singleTop”启动模式、使用“FLAG_ACTIVITY_SINGLE_TOP”标识,那么将不会启动这个intent代表的activity。

这个方法不能在子activity中使用,否则会抛出异常。

131、public voidstartIntentSender (IntentSender intent, Intent fillInIntent, int flagsMask, intflagsValues, int extraFlags, Bundle options)  add in android 4.1

和startActivity(Intent,Bundle)类似,但是使用IntentSender启动。

public void startIntentSender(IntentSender intent, Intent fillInIntent, int flagsMask, int flagsValues, intextraFlags)类似。

132、public voidstartIntentSenderForResult (IntentSender intent, int requestCode, IntentfillInIntent, int flagsMask, int flagsValues, int extraFlags, Bundle options)   add in android 4.1

和startActivityForResult(Intent,int)类似。但是这个方法还可以启动broadcast等。

public void startIntentSenderFromChild(Activity child, IntentSender intent, int requestCode, Intent fillInIntent, intflagsMask, int flagsValues, int extraFlags)类似

133、public voidstartIntentSenderFromChild (Activity child, IntentSender intent, intrequestCode, Intent fillInIntent, int flagsMask, int flagsValues, intextraFlags, Bundle options) add in android 4.1

和startActivityFromChild(Activity,Intent, int)类似。

134、public void startLockTask()   add in android 5.0

用户锁定到这个activity进程。这将时用户不能离开本应用,不能进入任何其他页面,包括设置界面。

如果isLockTaskPermitted(String)方法返回true,那么这个方法将起作用,用户只能在stopLockTask()方法被调用时才能退出这个模式;如果isLockTaskPermitted(String)方法返回false,那么系统将通过一个dialog给出提示是否允许进入这个模式,当用户根据提示进入到这个模式,那么用户也可以在任何时候通过提示框的描述退出这个模式,当然,调用stopLockTask()方法也可以退出这个模式。

135、public booleanstartNextMatchingActivity (Intent intent, Bundle options)  add in android 4.1

启动activity的一个特别方法,当你在替换activity的时候使用。可以通过这个方法将这个intent交给能够处理它的activity。   可以在onCreate中调用这个方法,intent可以通过getIntent()获得。

参数:intent将要分发给下一个activity。正确的操作是,这个activity必须和启动当前的activity的intent是一样的,只可以更改intent中附加的信息。

options包含启动这个activity的附加条件。

返回值:如果将有一个activity因此启动,则返回true;否则返回false。通常,如果返回true,就应该调用finish()来销毁自己。

136、public void startPostponedEnterTransition()   add in android 5.0

在postponeEnterTransition()被调用后开启动画延迟效果。

137、public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData, booleanglobalSearch)

这个方法用来启动搜索界面。

这个方法通常在onSearchRequested()方法中被调用。因此,如果只是简单的开始一个搜索,更好的方法是调用onSearchRequested()方法,onSearchRequested()可能已经被重写;如果是希望注入指定的搜索数据,那么也建议重写onSearchRequested()方法,这样,在其他地方的调用也是有效的。

参数:initialQuery   任何非空字符串。它将直接显示在搜索框内。

selectInitialQuery   如果为true,那么initialQuery将显示为被选中状态,否则光标将显示在initialQuery后面。

appSearchData   应用可以在这里添加由应用指定的context上下文,这可以提升搜索质量。如果这个值可以通过“SEARCH”对象返回,它也可以是NULL。

globalSearch   如果为true,将进行全局搜索;为false。将只会在应用定义的地方搜索,一般为本地搜索,但若应用未对此定义,将直接进行全局搜索。

138、public void stopLockTask ()

与startLockTask()搭配。取消用户锁定。

139、public void takeKeyEvents(boolean get)

请求由activity处理按键事件。   在activity没有view获取焦点时,但是activity希望有机会处理按键事件时使用。

140、public void triggerSearch(String query, Bundle appSearchData)

与startSearch(String,boolean, Bundle, boolean)类似。

141、public voidunregisterForContextMenu (View view)

反注册view的context menu。

 

受保护的方法

1、 protected void onActivityResult (int requestCode, int resultCode, Intentdata)

当由当前activity启动的activity关闭时被调用。

参数:requestCode   startActivityForResult方法提供

resultCode   子activity的setResult方法提供

data   包含返回的数据

2、 protected void onApplyThemeResource (Resources.Theme theme, int resid,boolean first)

由setTheme(int) 和 getTheme()调用,以提供主题资源到当前的主题对象。

3、 protected void onChildTitleChanged (Activity childActivity, CharSequencetitle)

4、 protected void onCreate (Bundle savedInstanceState)

activity启动时调用。  

这里应该改进型大多数的初始化:1、调用setContentView方法提供activity的UI界面

2、findViewById(int)实例化组件

如果在这个方法中调用finish()方法,那么onDestroy()将被调用。而其他生命周期方法将不会调用。

子类必须覆盖这个方法,否则将会抛出异常。

参数:savedInstanceState   包含onSaveInstanceState(Bundle)方法最近一次保存的数据。在activity重新实例化时可以用与恢复状态。

5、 protected void onDestroy ()

执行Activity销毁前的最后清理。可能在activity调用finish()方法或则系统临时销毁这个activity实例回收资源时调用,可以通过isFinishing()方法区分。

需要注意的是,不能依赖这个方法来保存数据。例如,当用户在编辑content provider数据时,这些编辑操作应该在onPause() 或onSaveInstanceState(Bundle)保存,而不是这里。

这个方法可以用来释放与activity关联的线程资源。

系统杀死activity时并不保证这个方法一定被执行。

子类覆盖这个方法是必须调用父类的实现super.onDestory();否则将抛出异常。

6、 protected void onNewIntent (Intent intent)

当startActivity(Intent)执行,且intent设置了“FLAG_ACTIVITY_SINGLE_TOP”或intent所代表的activity被启动模式为“singleTop”时,这个方法将被调用。在这两种情况下,当activity栈栈顶的activity完成重启以替代新的activity启动时,onNewIntent将被调用,此时这个intent是重启中用到的intent。

activity总会在收到新的intent之前进入“paused”状态,因此可以确定onResume()将在onNewIntent执行后被调用。

需要注意的是,getIntent()仍然会返回原有的intent,可以通过setIntent(Intent)来更新。

7、 protected void onPause ()

当activity正进入后台但是还没有被杀死的时候调用,与之对应的是Activity在onResume执行时进入前台。

当activiytyB启动到activityA前面时,activity的onPause方法将被调用。activityB将会在onPause执行完成后才会开始创建,因此不要在onPause中执行耗时操作。

这个方法经常被用来持久化保存一些用户正在编辑的数据,它能确保即使是系统杀死该activity时,这些数据也被妥善保存。   这是释放资源的好地方:停止动画等其他消耗cpu的操作,或则关闭那些只能被单一操作的对象,如相机。

当系统缺乏资源时,可能会杀死处于“paused”状态(指onPause方法已执行完)的activity以回收进程。因此,你应该确保在这个方法中所有的全局持久化数据都被保存,比如:文件、content provider等等。   onSaveInstanceState(Bundle)被用来保存每个实例的状态。

通常这个方法执行完成后,下一个activity将创建,当下一个activity显示后,onStop放就会执行。但是有些情况下,onPause方法后可能直接回到onResume方法而重新显示。

子类覆盖这个方法时,应该调用父类的方法super.onPause();否则抛出异常。

8、 protected void onPostCreate (Bundle savedInstanceState)

在activity完成启动,即onStart() 和onRestoreInstanceState(Bundle)已经被调用以后才调用此方法。应用并不实现这个方法,它是为了系统类在应用运行后进行最后的实例化。

子类覆盖这个方法时,应该调用父类的方法super. onPostCreate (Bundle);否则抛出异常。

savedInstanceState:如果activity是被重新实例化的,那么它代表最近一次由onSaveInstanceState(Bundle)保存的数据。

9、 protected void onPostResume ()

当onResume()已经被调用后执行。应用一般不覆盖这个方法。

子类覆盖这个方法时,应该调用父类的方法super. onPostResume (Bundle);否则抛出异常。

10、protected void onRestart ()

当onStop执行后,activity又将重新显示时执行,onReStart之后将执行onStart和onResume。

子类覆盖这个方法时,应该调用父类的方法super. onRestart (Bundle);否则抛出异常。

11、protected voidonRestoreInstanceState (Bundle savedInstanceState)

这个方法是在activity从之前保存的状态数据中重新实例化时在onStart完成后执行。

大部分实现只是简单的在onCreate中恢复那些状态;但是有时候它是一个方便的方法允许子类在实例化已经完成时决定是否使用默认的实现。这个方法默认的实现是恢复view之前的状态。

这个方法酱紫啊onStart和onPostStart方法之间执行。

12、protected void onResume ()

可能在onRestoreInstanceState(Bundle)、 onRestart()或则onPause()之后执行。这个方法表示activity将要与用户产生互动。这是开始动画、开启需要单一进入资源(比如相机)等的好地方。

13、protected void onSaveInstanceState(Bundle outState)

用来在activity被杀死前保存每个实例的状态。这样,这些状态可以在onCreate(Bundle) 或者onRestoreInstanceState(Bundle)方法中恢复。

这个方法是在activity可能会被杀死前调用的以便于下一次回来的时候这些状态可以被恢复。例如:activityB启动到了activityA的前面,然而有时候activityA可能就被杀死了,activityA将会有一次机会去保存当前的状态。

不要在onPause和onSaveInstanceState之间矛盾。onPause作为activity的生命周期的一部分,它将总会被调用,但是onSaveInstanceState却不一定。例如:当用户从activityB中导航回activityA时,onSaveInstanceState就不会被调用,因为当前的状态本来就是完整的,系统会避免调用它。只要在activityB的生命周期内,activityA不会被销毁,onSaveInstanceState就不会被调用。

默认的实现会保存那些具有id标识的view对象的状态,对应地,onRestoreInstanceState(Bundle)默认的实现就会去恢复这些view的状态。覆盖这个方法的时候,如果你希望全部保存那些view的状态,就调用默认的实现,否则就自己处理。

如果这个方法被调用,那么它将在onStop()之前执行。但并没有指定它在onPause之前还是之后执行。

14、protected void onStart ()

在onCreate(Bundle)或者onRestart()(当这个activity从“stopped”状态恢复时)之后执行,它后面总是执行onResume()。

子类覆盖这个方法的时候应该调用默认的实现super.onStart();否则将抛出异常。

15、protected void onStop ()

当activity不再可见的时候执行。下一步可能是onRestart、onDestory或则不再执行任何方法。

需要注意的是,这个方法可能永远不会执行。系统可能在onPause方法后直接杀死activity。

子类覆盖这个方法的时候应该调用默认的实现super. onStop();否则将抛出异常。

16、protected void onTitleChanged(CharSequence title, int color)

17、protected voidonUserLeaveHint ()

当用户决定将这个activity置于后台时作为生命周期的一部分。例如:用户按下“Home”按钮,onUserLeaveHint将会被调用;但是如果是一个来电使activity自动进入后台,那么onUserLeaveHint就不会执行。如果它被调用,那么是在onPause执行后立即被调用。

这个方法是为了帮助activity管理它的通知栏状态,特别是帮助activity在正确的时候取消一个通知。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值