Activity的public和protected方法整理

来源:互联网 发布:网络工程项目 编辑:程序博客网 时间:2024/06/05 08:10

之所以写这篇博客,是有一定渊源的。实际上Activity和Fragment提供的部分方法都非常的有用,但是除了生命周期的相关方法,其他的都没特地去了解过。此文将对其中未废弃的公共方法或protected方法加以详细解析,备用:(三星常用,两星不出名但常用或出名不太常用【着重看这部分,因为三星的大家都会,一星的用不着,这部分可能很有用】,一星不常用)

Activity

public方法:

addContentView(View view, ViewGroup.LayoutParams params)
☆☆
看到方法名就知道,这是一个添加子控件的方式,在已有控件基础上添加新的控件,对于某些动态控件或许用的到。

closeContextMenu()
☆☆
程序关闭最近打开的上下文菜单。ContextMenu:上下文菜单,长按某项时跳出的选项菜单。

closeOptionsMenu()
☆☆
关闭选项菜单。OptionsMenu:选项菜单,可在Actionbar设置为可见。部分机型如小米需要有除了menu键外的其他途径看到该选项菜单。

createPendingResult(int requestCode, Intent data, int flags)
☆☆
创建PendingIntent对象,该对象可通过intent传递,然后在onActivityResult中获取返回值,可用于activity和service通信等。

dispatchGenericMotionEvent(MotionEvent ev)

官网解释是处理通用的运动事件,不太懂,是phoneView的方法。目前没查到什么资料。

dispatchKeyEvent(KeyEvent event)
☆☆☆
这个简单,就是按键事件,通常这个会重写返回事件。

dispatchKeyShortcutEvent(KeyEvent event)

处理快捷键事件。这个也不太懂,貌似是DectorView会调用,其他地方都用的不多。

dispatchPopulateAccessibilityEvent(AccessibilityEvent event)

在发生交互事件事件后,先调用的方法。以下为AccessibilityEvent触发条件:

TYPE_VIEW_CLICKED
表明用户点击一个View(例如,用户选择一个按钮)
TYPE_VIEW_LONG_CLICKED
表明用户正在对一个View长按
TYPE_VIEW_SELECTED
表明用户在view中选择一个item。通常适用于一个AdapterView中
TYPE_VIEW_FOCUSED
表明用户移动焦点到view
TYPE_VIEW_TEXT_CHANGED
表明View的文本或内容被改变了

以上情况发生时,会调用dispatchPopulateAccessibilityEvent

dispatchTouchEvent(MotionEvent ev)
☆☆☆
这个方法可以用于处理屏幕的点击事件,我以前用这个方法处理过edittext的点击收起键盘,不过会略有卡顿,可以考虑使用某种方法直接setOnTouchListener,dispatchXXEvent方便,但是容易出现卡顿问题。

dispatchTrackballEvent(MotionEvent ev)
☆☆
分发事件,这个可以去看android的事件分发机制去进一步了解。触摸事件很多的情况有用。

dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args)
☆☆
输出ActivityManagerService日志信息到指定位置,可以当做一种异常退出的调试手段。

findViewById(int id)
☆☆☆
用于根据id获取控件,现在用butterknife这些可以替换大部分的findViewById了,不过对于一些自定义的东西,这个方法依旧很有用。

finish()
☆☆☆
结束栈顶activity,有一些,比如动画,比如setResult(RESULT_OK);这些一定要放在它后面

finishActivity(int requestCode)

结束其他的startActivtyForResult请求码的activity,据说是在onActivityResult中调用的,但是我已经返回了,怎么可能不finish之前的activity呢?感觉这个没什么作用。

finishActivityFromChild(Activity child, int requestCode)

当一个子Activity调用finishActivity()是触发,感觉也没什么用。

finishAffinity()
☆☆
关闭所有当前栈activity,如果都在当前栈,则退出。感觉这个会很有用,可以直接放到ActivityManager里面。

finishFromChild(Activity child)

当子类Activity调用finish时,会触发该方法,或许可以多分几个BaseActivity操作,但个人感觉这种联动的不太好控制。

getActionBar()
☆☆☆
这个不用说了吧?获取顶部工具栏,可以进行设置标题,图标,返回按钮等操作。

getApplication()
☆☆☆
获取Application,这个可以考虑不使用,直接在自定义application中onCreate使用静态保存变量即可。

public static Application superContext;...onCreate(...){superContext = this;}public static void getApp(){    return superContext;}

这样用个人感觉更方便.

* getCallingActivity()*
☆☆
获取startActivityForResult的来源activity,感觉会比较有用,可以直接对上一activity设置一些东西。

getCallingPackage()

获取startActivityForResult的来源activity的包名,这个没啥用吧,本来获取activity也可以获取包名。

getChangingConfigurations()
☆☆
官方:【如果这个Activity是因为它不能处理被改变配置参数破坏(因而其onconfigurationchanged(配置)的方法是不被称为),那么你可以用这个方法来发现发生在被摧毁的过程都有改变设置。】看这意思是用于调试的?不大懂,看上去似乎挺有用。

getComponentName()
☆☆
可用于前一个intent中存放包名类名后取出

ComponentName cn=new ComponentName("com.xx", "com.xx.A");Intent intent = new Intent(); intent.setComponent(cn);startActivityForResult(intent,2);

getCurrentFocus()
☆☆
获取Activity当前获取焦点的view

getFragmentManager()
☆☆☆
获取fragment管理类,用于添加删除替换fragment等操作

getIntent()
☆☆☆
获取上一个Activity传递过来的数据。

getLayoutInflater()
☆☆
可以用于获取view,等价于LayoutInflater.from(this)
getLayoutInflater().inflate(R.layout.xx);

getLoaderManager()
☆☆
加载contentprovider数据时可以用到

getLocalClassName()
☆☆
获取的activity名不包括包名

getMenuInflater()
☆☆
获取menu布局,可以百度MenuItem了解相关知识

getParent()
☆☆
获取父Activity

getParentActivityIntent()

获取一个意图,该目标将启动由该活动的逻辑父节点指定的显式目标活动。(不懂)

getPreferences(int mode)
☆☆☆
获取SharePreferences,用于简单数据存储

getRequestedOrientation()

获取Activity请求的方向

getSystemService(String name)
☆☆☆
这个还是挺有用的,比如获取手机网络情况,电池电量之类的。

getTaskId()

获取Activity的编号。

getTitle()

获取Activity的标题,感觉是manifestzhong的label。

getTitleColor()

没什么用

getVolumeControlStream()
☆☆
获取音量的,做视频或音乐的app用的到。

getWindow ()
☆☆
获取屏幕属性,获取屏幕截图之类的用的到。

getWindowManager ()
☆☆
获取windowmanager,这个没怎么用过可能是我层次不够。

hasWindowFocus ()
☆☆
判断activity的window是否获取焦点

* invalidateOptionsMenu ()*
☆☆
这个非常的有用,当actionbar的按钮要更新的时候就调用这个,这个会重新刷optionMenu

isChangingConfigurations ()
☆☆
官方:【检查此活动是否正在被销毁,以便使用新配置重新创建。 这通常用于onStop()来确定状态是否需要被清除,或者通过onRetainNonConfigurationInstance()传递给下一个活动实例。

返回
如果活动正在被拆除以便使用新配置重新创建,则返回true; else返回false。】

isChild ()

是否嵌入别的activity

isDestroyed ()
☆☆
判断Activity是否被销毁

isFinishing()
☆☆
官方:【检查这个Activity是否正在完成,无论是因为你调用finish()或者其他人都要求完成它。 这通常用在onPause()中来确定Activity是暂停还是完全完成。】
看到这个感觉略有用,可以用在onPause判断

isImmersive ()

是否是沉浸式,这里的沉浸式指的是全屏模式。

isTaskRoot ()

判断是否是第一个activity。感觉用处不大,一般首页都是启动页。

moveTaskToBack (boolean nonRoot)
☆☆
将activity退到后台,并不退出。类似于home键的效果

navigateUpTo (Intent upIntent)
☆☆
官方:【从此活动导航到由upIntent指定的活动,在此过程中完成此活动。如果upIntent指示的活动已经存在于任务的历史记录中,则该活动和历史堆栈中指定活动之前的所有其他活动都将完成。

如果指定的活动没有出现在历史堆栈中,这将完成此任务中的每个活动,直到达到任务的根活动,导致“应用程序内首页”行为。当可以通过不通过规范父活动的路径达到活动时,这对于具有复杂导航层次结构的应用程序可能很有用。

在与目的地相同的任务执行导航时,应使用此方法。在某些情况下,如果导航应该跨任务,请参阅shouldUpRecreateTask(Intent)。

参数
upIntent表示目标目的地的上传导航的意图
返回
如果导航成功地达到upIntent所指示的活动并且upIntent被传送给它,则为true。如果找不到指定活动的实例,并且此活动已正常完成,则为false。】
这个方法看起来对于返回主页有奇效,看起来像singleTask模式。

navigateUpToFromChild (Activity child, Intent upIntent)

又是有关child的,子activity调用上面的方法,则当前activity会调用这个方法

onActionModeFinished (ActionMode mode)
☆☆
和onActionModeStarted连用,主要是操作菜单,网页长按的时候出现。

onActionModeStarted(ActionMode mode)
☆☆
和onActionModeStarted连用,主要是操作菜单,网页长按的时候出现。

onAttachFragment (Fragment fragment)
☆☆
和fragment绑定,调用时机在fragment的onAttach()之后,onCreate之前

onAttachedToWindow ()
☆☆
和window绑定,个人理解是这之后可以用getWindow()了。

onBackPressed ()
☆☆☆
返回键调用的时候调用,比用onKeyEvent方便些

onConfigurationChanged (Configuration newConfig)

重新配置后调用此方法,一般在manifest中配置屏幕显示为竖屏横屏或者隐藏键盘之类。

onContentChanged ()
☆☆
Activity调用setContentView或addCotentView后触发此方法

onContextItemSelected (MenuItem item)
onContextMenuClosed (Menu menu)
onCreateContextMenu (ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
这几个都是设置contextmenu,contextitem的,这里不解释

onCreateDescription ()

这个方法会在onPause前调用

onCreateNavigateUpTaskStack (TaskStackBuilder builder)

定义在从其他任务上传导航期间将生成的合成任务堆栈。不懂。

onCreateOptionsMenu (Menu menu)
☆☆
optionmenu相关类,不解释

onCreatePanelMenu (int featureId, Menu menu)
(无星)
api解释了,不用处理

onCreatePanelView (int featureId)
返回null,所有子window都会处理

onCreateThumbnail (Bitmap outBitmap, Canvas canvas)
☆☆
提供缩略图

onCreateView (String name, Context context, AttributeSet attrs)
☆☆
设置view属性

onDetachedFromWindow ()
☆☆
和window解除绑定

onGenericMotionEvent (MotionEvent event)

和dispatchMotionEvent相配,这个是处理的

public boolean onGenericMotionEvent(MotionEvent event) {     if (event.isFromSource(InputDevice.SOURCE_CLASS_JOYSTICK)) {         if (event.getAction() == MotionEvent.ACTION_MOVE) {             // process the joystick movement...             return true;         }     }     if (event.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) {         switch (event.getAction()) {             case MotionEvent.ACTION_HOVER_MOVE:                 // process the mouse hover movement...                 return true;             case MotionEvent.ACTION_SCROLL:                 // process the scroll wheel movement...                 return true;         }     }     return super.onGenericMotionEvent(event); }

可以处理一些移动事件

onKeyDown (int keyCode, KeyEvent event)
☆☆☆
和dispatch相配,不解释

onKeyLongPress (int keyCode, KeyEvent event)

长按某键

onKeyMultiple (int keyCode, int repeatCount, KeyEvent event)
☆☆
多次按某键,感觉还是用onkeydown更好些,比如再按一次退出程序,onkeydown按几次都可以处理,还可以控制时间

onKeyShortcut (int keyCode, KeyEvent event)

短按,不解释

onKeyUp (int keyCode, KeyEvent event)
☆☆
抬起按键

onLowMemory ()
☆☆
和onTrimMemory()一样都在内存不足时会被调用,可用于内存oom检测使用

onMenuItemSelected (int featureId, MenuItem item)
onMenuOpened (int featureId, Menu menu)
☆☆☆
menu相关,不解释

onNavigateUp ()
☆☆
用户点击了ActionBar左上角返回键

onNavigateUpFromChild (Activity child)

子类触发了onNavigateUp ()

onOptionsItemSelected (MenuItem item)
onOptionsMenuClosed (Menu menu)
onPanelClosed (int featureId, Menu menu)
☆☆
menu相关,不解释

onPrepareNavigateUpTaskStack (TaskStackBuilder builder)
☆☆
调用 onCreateNavigateUpTaskStack(TaskStackBuilder)前调用该方法

onPrepareOptionsMenu (Menu menu)
onPreparePanel (int featureId, View view, Menu menu)
☆☆
menu相关,不解释

onProvideAssistData (Bundle data)

文档【当用户请求协助时,将调用此方法,以便在当前应用程序的所有上下文中构建完整的ACTION_ASSIST意图。 您可以覆盖此方法将任何您希望出现在协助意图的EXTRA_ASSIST_CONTEXT部分中的任何内容放入捆绑包中。 默认实现什么都不做。

在通过Application.registerOnProvideAssistDataListener注册的任何全局辅助回调后,将调用此函数。】

onSearchRequested ()
☆☆
搜索方法,可配置跳转到指定页面或当前页面

onTouchEvent (MotionEvent event)
onTrackballEvent (MotionEvent event)
☆☆☆
这两个不解释,和dispatach部分一个意思,这部分是做处理的

onTrimMemory (int level)
☆☆
和前面onLowMemory类似,使用场景略有区别。

onUserInteraction ()

据说home,back,menu键会触发.

onWindowAttributesChanged (WindowManager.LayoutParams params)
☆☆
window属性变化时触发

onWindowFocusChanged (boolean hasFocus)
overridePendingTransition (int enterAnim, int exitAnim)
整个activity加载完毕,获取焦点时触发

onWindowStartingActionMode (ActionMode.Callback callback)
系统调用,不用理,出错的时候恐怕就会调用了

openContextMenu (View view)
openOptionsMenu ()
menu相关的,不解释。

overridePendingTransition (int enterAnim, int exitAnim)
☆☆☆
finish后调用的进出动画

recreate ()

在一个新栈内重新创建activity(onDestroy()又重新create的时候也会调用)

registerForContextMenu (View view)
☆☆☆
contextmenu相关,不解释

reportFullyDrawn ()
☆☆
记录从activity启动,到掉用该方法所用的时间,可用于计算应用的启动时间。

requestWindowFeature (int featureId)
☆☆
调用getWindow().requestFeature时会被调用

runOnUiThread (Runnable action)
☆☆☆
在子线程时可让action的run代码运行在主线程,可作为简易handler使用。

setContentView (int layoutResID)
setContentView (View view)
setContentView (View view, ViewGroup.LayoutParams params)
☆☆☆
这两个是设置activity显示页面的,学过android的都知道

setDefaultKeyMode (int mode)
☆☆
处理key事件,处理后不会再其他方法中再调用

setFeatureDrawable (int featureId, Drawable drawable)
setFeatureDrawableAlpha (int featureId, int alpha)
setFeatureDrawableResource (int featureId, int resId)
setFeatureDrawableUri (int featureId, Uri uri)
☆☆
设置Activity的图标来源,透明度等

setFinishOnTouchOutside (boolean finish)【api>=11】
☆☆
触摸外部时关闭,当activity的style为dialog时,可考虑用此方法关闭

* setImmersive (boolean i)【api>=18】*
☆☆☆
设置是否使用浸入式

setIntent (Intent newIntent)
☆☆☆
有getIntent()就有setIntent(intent),此方法的好处是可以保存数据,intent的数据不会随activity销毁而销毁,是一种可以考虑的保存数据方式

setProgress (int progress)

requestWindowFeature(int featureID);方法被设定成指定值时有效,现在也没什么人把这个功能放在顶部吧,所以设为一星

setProgressBarIndeterminate (boolean indeterminate)

设置标题的进度条进度是否单纯代表动画

setProgressBarIndeterminateVisibility (boolean visible)

设置不确定的进度条是否示

setProgressBarVisibility (boolean visible)

设置进度条是否显示

setRequestedOrientation (int requestedOrientation)
☆☆
设置屏幕方向,纵横

setResult (int resultCode)
setResult (int resultCode, Intent data)
☆☆☆
设置返回码,返回数据

setSecondaryProgress (int secondaryProgress)

设置进度条二级进度

setTitle (int titleId)
setTitle (CharSequence title)
setTitleColor (int textColor)

这几个设置的是window的属性,没什么用

setVisible (boolean visible)
☆☆
设置window是否可见,不显示window,用户看啥?不大懂有什么用。

setVolumeControlStream (int streamType)
☆☆
设置声音属性的,只在特定的地方有作用。

shouldUpRecreateTask (Intent targetIntent)【api>=16】

官方:【如果应用程序通过使用targetIntent从此活动导航“up”,应该重新创建任务,则返回true。

如果此方法返回false,该应用程序可以使用相同的参数轻松地调用navigateUpTo(Intent)来正确执行导航。 如果此方法返回false,应用程序应该使用TaskStackBuilder或其他类似的机制来合成新的任务堆栈来执行导航。

参数
targetIntent表示上行导航的目标目的地的意图
返回
如果导航应该重新创建一个新的任务栈,则为true,如果目的地使用相同的任务,则为false】

startActionMode (ActionMode.Callback callback)
☆☆
也属于长按按钮选择菜单的功能。

startActivities (Intent[] intents, Bundle options)
startActivities (Intent[] intents)

或许某些特殊的开发场景能用的到吧?用户没必要看到的启动它干嘛?

startActivity (Intent intent)
startActivity (Intent intent, Bundle options)
☆☆☆
页面跳转

startActivityForResult (Intent intent, int requestCode)
startActivityForResult (Intent intent, int requestCode, Bundle options)
有返回数据的页面跳转

startActivityFromChild (Activity child, Intent intent, int requestCode, Bundle options)
startActivityFromChild (Activity child, Intent intent, int requestCode)
startActivityFromFragment (Fragment fragment, Intent intent, int requestCode, Bundle options)
startActivityFromFragment (Fragment fragment, Intent intent, int requestCode)

这几个用的少一些

startActivityIfNeeded (Intent intent, int requestCode, Bundle options)
startActivityIfNeeded (Intent intent, int requestCode)

如果不是single或singletask或者requestCode<0则会启动,否则不会启动,实际上startActivity已经包括了,没有必要用这个。

startIntentSender (IntentSender intent, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, Bundle options)
startIntentSender (IntentSender intent, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)
startIntentSenderForResult (IntentSender intent, int requestCode, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, Bundle options)
startIntentSenderForResult (IntentSender intent, int requestCode, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)
startIntentSenderFromChild (Activity child, IntentSender intent, int requestCode, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)
startIntentSenderFromChild (Activity child, IntentSender intent, int requestCode, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, Bundle options)


PendingIntent.getService的源码里面有用到。官方:【和startActivity差不多,只不过启动的时候多了个IntentSender】,获取IntentSender:pendingIntent.getIntentSender().

startNextMatchingActivity (Intent intent)
startNextMatchingActivity (Intent intent, Bundle options)
☆☆
boolean has=startNextMatchingActivity(getIntent());
if(has) finish();

startSearch (String initialQuery, boolean selectInitialQuery, Bundle appSearchData, boolean globalSearch)
☆☆
使用搜索控件

takeKeyEvents (boolean get)

即使activity没有获得焦点,也会获得机会处理事件。

triggerSearch (String query, Bundle appSearchData)
☆☆
搜索相关

unregisterForContextMenu (View view)
☆☆☆
menu相关

protected方法:

onActivityResult (int requestCode, int resultCode, Intent data)
☆☆☆
与startActivityForResult连用,用于获取上一个activity的返回内容

onApplyThemeResource (Resources.Theme theme, int resid, boolean first)
☆☆☆
此方法只能在子线程中被调用

onChildTitleChanged (Activity childActivity, CharSequence title)

子标题改变

onCreate (Bundle savedInstanceState)
☆☆☆
view可以被初始化时

onDestroy ()
☆☆☆
Activity被销毁

onNewIntent (Intent intent)
☆☆☆
singleTask状态启动进程未被杀死会执行,不会执行onCreate

onPause ()
☆☆☆
生命周期,失去焦点

onPostCreate (Bundle savedInstanceState)
☆☆☆
activity彻底被调用后会执行的方法,可用于获取尺寸

onPostResume ()
☆☆☆
onResume结束时会被调用

onRestart ()
☆☆☆
生命周期,onstop之后重启

onRestoreInstanceState (Bundle savedInstanceState)
☆☆☆
数据持久化用

onResume ()
☆☆☆
生命周期

onSaveInstanceState (Bundle outState)
☆☆☆
应用到后台时,保存activity状态数据,重启时可以在onsaveinstance中回填

onStart ()
☆☆☆
生命周期

onStop ()
☆☆☆
生命周期

onTitleChanged (CharSequence title, int color)
官方无介绍

onUserLeaveHint ()

最近应用键

总结:以下是筛选一些比较特别通过写这些方法得到的。
getCallingActivity()-获取上一个activity来源
onAttachedToWindow ()-window绑定到界面
onDetachedToWindow ()-window从界面解绑
onBackPressed ()-个人用onKeyDown多些,不过这个更方便
onLowMemory (),onTrimMemory()-低内存,方便追查oom
moveTaskToBack (boolean nonRoot)-home键监听
onApplyThemeResource (Resources.Theme theme, int resid, boolean first)-进入activity先进行的方法,可考虑一些固定数据
onNewIntent (Intent intent)-官方解释为singleTop可能被调用
onPostCreate (Bundle savedInstanceState)-activity彻底被调用可用方法,可获得尺寸

原创粉丝点击