Activity重要方法总结

一、Activity的继承关系:Activity extends ContextThemeWrapper

implements LayoutInflater.Factory2,
Window.Callback, 
KeyEvent.Callback,
OnCreateContextMenuListener, 
ComponentCallbacks2,
Window.OnWindowDismissedCallback
1、ContextThemeWrapper继承关系:ContextThemeWrapper extends ContextWrapper,看到这里就会发现ContextThemeWrapper与Application属于同一层次,都是ContextWrapper的子类,前者侧重于扩展ContextWrapper的资源相关的功能,后者则侧重于扩增组件的运行状态的监控功能;另外还需要知道的是ContextWrapper仅仅只是对Context的包装,内部只有唯一的属性:mBase,它代表就是Context本身。


2、LayoutInflater.Factory2接口:Factory2 extends Factory,注意这两个接口都在LayoutInflater类中定义,具体如下:

public interface Factory {
   public View onCreateView(String name, Context context, AttributeSet attrs);
}
public interface Factory2 extends Factory {
        public View onCreateView(View parent, String name, Context context, AttributeSet attrs);
}
说明:从接口名及接口方法不难发现,这是一个与布局相关的接口,用于创建View的回调接口,在Activity中主要是用于嵌入Fragment的View的操作。主要有两个地方会使用到:一是FragmentActivity的onCreateView方法,另一是LayoutInflater的内部类:FactoryMerger。

3、Window.Callback接口:定义了一系列的窗口事件相关的方法,主要包括事件的分发、窗口的活动状态等具体如下:
public interface Callback {
public boolean dispatchKeyEvent(KeyEvent event); //按键事件分发
public boolean dispatchKeyShortcutEvent(KeyEvent event);
public boolean dispatchTouchEvent(MotionEvent event);//触屏事件分发
public boolean dispatchTrackballEvent(MotionEvent event);//轨迹球事件分发
public boolean dispatchGenericMotionEvent(MotionEvent event); //移动事件分发
public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event);
public View onCreatePanelView(int featureId);//应该是导航栏
public boolean onCreatePanelMenu(int featureId, Menu menu);
public boolean onPreparePanel(int featureId, View view, Menu menu);
public boolean onMenuOpened(int featureId, Menu menu);
public boolean onMenuItemSelected(int featureId, MenuItem item);
public void onWindowAttributesChanged(WindowManager.LayoutParams attrs);
public void onContentChanged();
public void onWindowFocusChanged(boolean hasFocus);
public void onAttachedToWindow();
public void onDetachedFromWindow();
public void onPanelClosed(int featureId, Menu menu);
public boolean onSearchRequested();
public ActionMode onWindowStartingActionMode(ActionMode.Callback callback);
public void onActionModeStarted(ActionMode mode);
public void onActionModeFinished(ActionMode mode);
}

4、 KeyEvent.Callback接口:相比Window.Callback,KeyEvent.Callback提供了更细粒度的点击事件。那么KeyEvent.Callback是否与
Window.Callback的dispatchKeyEvent方法有关系?具体如下:
public interface Callback {
boolean onKeyDown(int keyCode, KeyEvent event);
boolean onKeyLongPress(int keyCode, KeyEvent event);
boolean onKeyUp(int keyCode, KeyEvent event);
boolean onKeyMultiple(int keyCode, int count, KeyEvent event);
}

5、OnCreateContextMenuListener接口:当context menu被创建的时候就会被回调
public interface OnCreateContextMenuListener {
        void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo);
}

6、ComponentCallbacks2接口:具体在Application章节

7、Window.OnWindowDismissedCallback接口:当窗口消失的时候就会回调该接口,需要注意的是该接口是一隐藏接口。
public interface OnWindowDismissedCallback {
        public void onWindowDismissed();
    }

二、Activity的构造方法:默认无参构造方法,是由框架通过调用Instrumentation的newActivity方法来实现构造。

三、Activity的方法总结:
1、public LoaderManager getLoaderManager()方法:获取mLoaderManager实例
(1)LoaderManager:LoaderManager用来负责管理与Activity或者Fragment联系起来的一个或多个Loaders对象。每个Activity或者Fragment都有唯一的一个LoaderManager实例,用来启动、停止、保持、重启、关闭它的Loaders。这些事件有时直接在客户端通过调用initLoader()/restartLoader()/destroyLoader()函数来实现。google推荐使用Loader机制,来实现Proider的数据查询操作,注意LoaderManager与Activity或Fragment的生命周期相关联。

(2)Loader的作用:主要的作用在单独的线程中读取数据和监视数据的更新,以防止阻塞UI线。使用方法为:
getLoaderManager().initLoader(0,null,this);//这里的第一个参数0是指loader的id,我们并不关注它,所以设置了一个0。第二个参数是给Loader初始化的时候传递的参数(也就是onCreateLoader中的第二个参数)。这里的第三个参数LoaderCallbacks<D>使用的直接是Activity类,所以这个类需要实现LoaderCallbacks<D>的三个方法:
@Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        Log.d(TAG,"onCreateLoader");
        CursorLoader loader = new CursorLoader(this,TestContentProvider.CONTENT_URI,null,null,null,null);
        return loader;
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
        Log.d(TAG,"onLoadFinished:" + cursor);
        if (cursor != null) {
            StringBuilder sb = new StringBuilder();
            while (cursor.moveToNext()) {
                String s = cursor.getString(cursor.getColumnIndex(TestDBHelper.TABLE_COLUMN_SUBJECT));
                String c = cursor.getString(cursor.getColumnIndex(TestDBHelper.TABLE_COLUMN_CONTENT));
                sb.append("[ s=").append(s).append(",c=").append(c).append(" ]; ");
            }
            mOutput.setText(sb.toString());
        }
    }

    @Override
    public void onLoaderReset(Loader<Cursor> loader) {
        Log.d(TAG,"onLoaderReset");
    }

2、protected void onCreate(@Nullable Bundle savedInstanceState) 

说明:Activity生命周期方法oncreate,在该方法中主要做了以下几件事情

(1)对mAllLoaderManagers赋值,而mAllLoaderManagers是ArrayMap<String, LoaderManagerImpl>类型,里面存放LoaderManager。
(2)初始化mActionBar
(3)通过Bundle参数,恢复mFragments的状态
(4)onCreate的作用:在该方法里执行布局加载、控件绑定、以及获取数据供UI显示。
(5)当在onCreate中执行Activity.finish()方法时,会立刻执行onDestroy方法,而不会去执行Activity的生命周期的其他方法。

   public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
        onCreate(savedInstanceState);
   }

说明:该方法与manifest中Activity中的android:persistableMode有关系,是Android5.0新增方法,当设置成persistAcrossReboots,重启之后会回调该方法,再由该方法调用oncreate方法,如上源码。

3、protected void onSaveInstanceState(Bundle outState) {} 

说明:onSaveInstanceState的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据。

   public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
onSaveInstanceState(outState);

   } 

说明:该方法与manifest中Activity中的android:persistableMode有关系,是Android5.0新增方法,当设置成persistAcrossReboots,只回调该方法,再由该方法调用oncreate。

注意:onSaveInstanceState是在onPause到onStop之间执行。onSaveInstanceState并不一定会调用,且onSaveInstanceState一般用于
保存activity实例的状态信息,用于恢复Activity状态的数据。

4、protected void onRestoreInstanceState(Bundle savedInstanceState) {}

说明:调用的前提是,activity A“确实”被系统销毁了,而如果仅仅是停留在有这种可能性的情况下,则该方法不会被调用。(如屏幕旋转时就会触发该方法)

public void onRestoreInstanceState(Bundle savedInstanceState,PersistableBundle persistentState) {
        if (savedInstanceState != null) {
            onRestoreInstanceState(savedInstanceState);
        }
   }
说明:与上面的类似,与生命周期相关的方法都在5.0新增了该类方法
注意:onRestoreInstanceState是在onStart到onResume期间,onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成对的被调用的


5、protected void onPostCreate(@Nullable Bundle savedInstanceState) { }
注意:不建议重写该方法,因为该方法是给系统类做最后的初始化工作的。


6、protected void onStart() {}

说明:Activity生命周期方法,onCreate或onStop之后执行。由该源码中可以看到,在该方法中主要是启动mLoaderManager。

注意:因为在该方法中并没有看到任何与UI可见相关的代码逻辑,所以Activity的UI可不可见并不在该方法中执行,而真正对用户可见是在onWindowFocusChanged之后。

   protected void onRestart() { 
        mCalled = true; 
   }  
说明:该方法的调用时机如下,例如锁屏之后重新显示,执行流程onRestart --> onStart --> onResume

7、protected void onResume() {}

注意:键盘不会触发activity的生命周期,当键盘在activity上面时,就不可以用此方法来判断UI可见,可以依据onWindowFocusChanged方法来判断

   protected void onPostResume() {
   }
说明:在onResume之后调用
注意:不建议重写onPostResume方法。


8、public void onWindowFocusChanged(boolean hasFocus) {} 

说明:当窗口的焦点状态改变时就会回调该方法

注意:经过打印Activity生命周期执行流程发现,在onResume--> onPostResume --> onWindowFocusChanged

public boolean hasWindowFocus() {} 
说明:获取activity主窗口的焦点状态,该状态与窗口中的View的状态是不一样的。

public void onWindowAttributesChanged(WindowManager.LayoutParams params) {}
说明:比如在super.oncreate执行就会回调多次该方法。


9、
    public boolean isVoiceInteraction() {
        return mVoiceInteractor != null;
    }
   @SystemApi
    public VoiceInteractor getVoiceInteractor() {
        return mVoiceInteractor;
    }
说明:系统Api,语音服务相关方法

10、protected void onNewIntent(Intent intent) {} 

说明:在方法的调用时,是不会执行onCreate、onStart方法,而是直接执行:onNewIntent --> onResume,总之就是复用原来的Activity实例。

(1)前提ActivityA已经启动过,处于当前应用的Activity堆栈中;
(2)当ActivityA的LaunchMode为SingleTop时,如果ActivityA在栈顶,且现在要再启动ActivityA,这时会调用onNewIntent()方法;
(3)当ActivityA的LaunchMode为SingleInstance,SingleTask时,如果已经ActivityA已经在堆栈中,那么此时会调用onNewIntent()方法
作用:利用已有的Acivity去处理别的Intent时,就可以利用onNewIntent来处理,通常被用在有搜索请求的activity,而其该activity有好几个intent-filter。

11、protected void onPause() {}
说明:
(1)由以上源码onPause代码很简单,甚至可认为onPause就是一个空方法。当activity正在由前台状态变成后台状态时会触发该方法,注意此时activity并没有被回收。
(2)关键点:新Activity的onCreate要等到旧Activity执行完onPause,因此不要在该方法中做耗时的操作。官方解释:When activity B is launched in front of activity A, this callback will be invoked on A.  B will not be created until A's {@link #onPause} returns,so be sure to not do anything lengthy here.
(3)作用:onPause代码虽简单,但是学问是挺多的。主要有两个作用:
a、当系统资源不够时、该Activity被回收之前,用于保存该Activity中需要持久化的数据,而防止丢失数据。
b、用于做诸如停止动画等比较消耗CPU资源的操作或者是去关闭资源文件,以加快新Activity的运行速度。
(4)与onSaveInstanceState方法的区别:一般来讲,onSaveInstanceState用于保存activity实例的状态信息,而onPause则是用于保存全局的持久化数据(Application级别),例如content providers, files。

12、protected void onUserLeaveHint() {}
说明:属于Activity生命周期的回调方法,当该Activity即将由前台状态变成后台状态时会调用该方法,比如按下Home按键或是启动一个新的Activity。
注意:该方法的调用时间是在onPause之前的,此时还是前台状态,当由电话打断当前Activity时,并不会触发该方法。使用场景:Android主页键和最近应用键的处理onUserLeaveHint。

public void onUserInteraction() {}
说明:当按键、触屏或轨迹球事件分发到该activity时就会回调该方法
作用:Implement this method if you wish to know that the user has interacted with the device in some way while your activity is running.This callback and onUserLeaveHint are intended to help activities manage status bar notifications intelligently; specifically,for helping activities determine the proper time to cancel a notfication.
注意:在activity的dispatchKeyEvent方法中,首先就是调用该方法。

13、public boolean onCreateThumbnail(Bitmap outBitmap, Canvas canvas) {
        return false;
    }
说明:该方法主要是为这个Activity生成一个缩略图。调用时间:This method is called before pausing the activity, and should draw into outBitmap the imagery for the desired thumbnail in the dimensions of that bitmap.

14、protected void onStop() {
        if (DEBUG_LIFECYCLE) Slog.v(TAG, "onStop " + this);
        if (mActionBar != null) mActionBar.setShowHideAnimationEnabled(false);
        mActivityTransitionState.onStop();
        getApplication().dispatchActivityStopped(this);
        mTranslucentCallback = null;
        mCalled = true;
    }
说明:当该Activity不再显示给用户看时,会调用该方法。
注意:this method may never be called, in low memory situations where the system does not have enough memory to keep your activity's process running after its {@link #onPause} method is called.

15、protected void onDestroy() {}
说明:在activity被完全被销毁之前,执行所有清除操作。当执行finish或系统销毁activity实例时,会调用该方法。
注意:最好不要在该方法中执行数据的保存等操作,而应该在onPause或onSaveInstanceState方法中。这方法通常是用来释放资源的,例如与线程相关的退出操作。在某些情况下,系统直接杀掉该进程时,是不会调用onDestroy方法的。

16、public void reportFullyDrawn() {}
说明:向系统报告该app已经完全显示出来了,仅仅是用于帮助测量app的启动时间。

17、public void onConfigurationChanged(Configuration newConfig) {}
说明:只有在manifest中声明了configChanges属性时,activity在运行过程中,当设备的配置改变时会被调用。例如旋转屏幕时。
从而避免重新来创建activity实例。
public int getChangingConfigurations(): 主要是用于获取到底是哪种配置改变。


18、public void onLowMemory() {}
说明:OnLowMemory是Android提供的API,在系统内存不足,所有后台程序(优先级为background的进程,不是指后台运行的进程)都被杀死时,系统会调用OnLowMemory。
public void onTrimMemory(int level) {}
说明:OnTrimMemory是Android 4.0之后提供的API,系统会根据不同的内存状态来回调。例如按Home键时就会调用。
作用:释放缓存包括一些文件缓存,图片缓存等 或 一些动态生成动态添加的View,这些动态生成和添加的View且少数情况下才使用到的View,这时候可以被释放。
TRIM_MEMORY_COMPLETE:内存不足,并且该进程在后台进程列表最后一个,马上就要被清理
TRIM_MEMORY_MODERATE:内存不足,并且该进程在后台进程列表的中部。
TRIM_MEMORY_BACKGROUND:内存不足,并且该进程是后台进程。
TRIM_MEMORY_UI_HIDDEN:内存不足,并且该进程的UI已经不可见了。
TRIM_MEMORY_RUNNING_CRITICAL:内存不足(后台进程不足3个),并且该进程优先级比较高,需要清理内存
TRIM_MEMORY_RUNNING_LOW:内存不足(后台进程不足5个),并且该进程优先级比较高,需要清理内存
TRIM_MEMORY_RUNNING_MODERATE:内存不足(后台进程超过5个),并且该进程优先级比较高,需要清理内存
注意:OnLowMemory和OnTrimMemory的比较
(1)OnLowMemory被回调时,已经没有后台进程;而onTrimMemory被回调时,还有后台进程。
(2)OnLowMemory是在最后一个后台进程被杀时调用,一般情况是low memory killer 杀进程后触发;而OnTrimMemory的触发更频繁,每次计算进程优先级时,只要满足条件,都会触发。
(3)通过一键清理后,OnLowMemory不会被触发,而OnTrimMemory会被触发一次。

19、public void onAttachFragment(Fragment fragment) { }
说明:调用时间为fragment.onAttach --> Activity.onAttachFragment

20、public void setContentView(int layoutResID) {
        getWindow().setContentView(layoutResID);
        initWindowDecorActionBar();
    }
说明:由该源码可以发现,真正显示View的是Window。而这个ContentView是一个FrameLayout,是DecorView的Child的Child。

public void addContentView(View view, ViewGroup.LayoutParams params) {
        getWindow().addContentView(view, params);
        initWindowDecorActionBar();
    }
说明:往ContentView添加View
注意:两者的区别主要包括两点:
(1)以添加UI组件是否被移除: setContentView() 会导致先前添加的被移除, 即替换性的;而 addContentView() 不会移除先前添加的UI组件,即是累积性的
(2)是否控制布局参数:addContentView() 有两个参数, 可以控制布局参数; 你指出的这个setContentView 没有接受布局参数,
默认使用MATCH_PARENT;  不过setContentView()也有带两个参数的版本, 可以控制布局参数。 

21、public TransitionManager getContentTransitionManager() {
        return getWindow().getTransitionManager();
    }
public void setContentTransitionManager(TransitionManager tm) {
        getWindow().setTransitionManager(tm);
    }
    public Scene getContentScene() {
        return getWindow().getContentScene();
    }
说明:android5.0新增功能,应该是用于activity的转场动画相关的操作。

22、public void setFinishOnTouchOutside(boolean finish) {
        mWindow.setCloseOnTouchOutside(finish);
    }
说明:当activity设置为对话框样式时,通过该方法可以设置点击对话框外的区别触发是否销毁activity。
注意:需要注意的是该方法要在onCreate方法设置时才有效。

23、public final void setDefaultKeyMode(@DefaultKeyMode int mode) {}
说明:用来设置一个Activity的默认的按键模式,但是测试不出来其作用。

24、public void onAttachedToWindow() {}
说明:当与该activity相关联的主窗口添加到window manager时,会回调该方法。执行顺序为:onPostResume --> onAttachedToWindow --> onWindowFocusChanged
public void onDetachedFromWindow() {}
说明:当与该activity相关联的主窗口从window manager分离时,会回调该方法。执行顺序为:onWindowFocusChanged--> onStop --> onDestroy --> onDetachedFromWindow
注意:与View.onAttachedToWindow和View.onDetachedFromWindow的区别,View中的是View添加到Window从Window分离时回调。

25、public boolean onKeyDown(int keyCode, KeyEvent event)  {}
说明:当按键按下时,且该activity中的View没有去处理该按键事件时,会触发该方法。主要用于按下按键的时的逻辑处理。
public boolean onKeyUp(int keyCode, KeyEvent event) {}
说明:当释放按键时,且该activity中的View没有去处理该按键事件时,会触发该方法。主要用于释放按键的时的逻辑处理。
public boolean onKeyLongPress(int keyCode, KeyEvent event) {}
说明:长按按键时回调该方法,但是需要特别的处理才回调,即要在onKeyDown中对event进行事件的追踪,如event.startTracking(),还要返回true,表示消费了该事件。主要用于长按按键的时的逻辑处理。
public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) {}
说明:暂时不清除何时回调。

public boolean dispatchKeyShortcutEvent(KeyEvent event) {}

public boolean onKeyShortcut(int keyCode, KeyEvent event) {}

说明:Called when a key shortcut event is not handled by any of the views in the Activity.
public boolean dispatchTrackballEvent(MotionEvent ev) {}
public boolean onTrackballEvent(MotionEvent event) {}
说明:轨迹球事件
public boolean dispatchGenericMotionEvent(MotionEvent ev) {}
public boolean onGenericMotionEvent(MotionEvent event) {}
说明:用于joystick movements, mouse hovers, track pad touches, scroll wheel movements and other input events这些事件。
public boolean dispatchTouchEvent(MotionEvent ev) {}
说明:触屏事件的分发方法
public boolean dispatchKeyEvent(KeyEvent event) {}
说明:按键事件的分发方法
public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {}
说明:android提供了一个accessibility层,帮助用户更容易的浏览android设备,该方法就是Accessibility事件的分发。(辅助功能)
具体请查看http://bbs.lewaos.com/thread-240305-1-1.html

26、public View onCreatePanelView(int featureId) {}
说明:通过重写Activity的onCreatePanelView()方法提供一个完全自定义的OptionMenu视图,即自定义menu。
public boolean onCreatePanelMenu(int featureId, Menu menu) {}

27、public boolean onSearchRequested() {} 
说明:用于浮动搜索的实现,即调用系统的searchUI组件。关键就是在该方法中启动search,即startSearch。
public void startSearch(@Nullable String initialQuery, boolean selectInitialQuery,@Nullable Bundle appSearchData, boolean globalSearch)
说明:调用系统的Search
具体看:http://blog.csdn.net/totogo2010/article/details/6571470
public void triggerSearch(String query, @Nullable Bundle appSearchData) {}
说明:触发搜索,类似于startSearch方法,用于触发Search

28、public void takeKeyEvents(boolean get) {
        getWindow().takeKeyEvents(get);
    }
说明:Request that key events come to this activity. Use this if your activity has no views with focus, but the activity still wants a chance to process key events.

29、public void startActivity(Intent intent) {}
public void startActivity(Intent intent, @Nullable Bundle options) {}
public void startActivityForResult(Intent intent, int requestCode) {}
public void startActivityForResult(Intent intent, int requestCode, @Nullable Bundle options) {}
说明:事实上前面三个方法最终都是调用最后一个方法,只是参数不一样。启动的关键是该方法中的以下代码
mInstrumentation.execStartActivity(this, mMainThread.getApplicationThread(), mToken, this,intent, requestCode, options);

mMainThread.sendActivityResult(mToken, mEmbeddedID, requestCode, ar.getResultCode(),ar.getResultData());

public void startActivityFromChild(Activity child, Intent intent,int requestCode,Bundle options){}

说明:被startActivityForResult使用。

30、public void overridePendingTransition(int enterAnim, int exitAnim) {}
说明:用于设置从一个activity跳转到另外一个activity时的切换动画。一部分是第一个activity退出时的动画,另外一部分时第二个activity进入时的动画。

31、public Uri getReferrer() {}
说明:获取本activity的调用者信息,但是在m85或s3都崩溃。NoSuchMethodError

32、public String getCallingPackage() {}
说明:获取调用者的包名,注意只有使用startActivityForResult这种方式,getCallingPackage的值才不会是null。
public ComponentName getCallingActivity() {}
说明:与上面类似,获取调用activity

33、public void recreate() {}
说明:创建创建activity实例,适应于android5.0之前用于切换主题。

34、public void finish() {}
public void finishAndRemoveTask() {}
说明:以上两者区别,当task中只有该activity时,是否移除从多任务中移除。

public void finishAffinity() {} 
说明:关闭启动的所有有着相同的Affinity的activity。

public void finishFromChild(Activity child) {}
public void finishAfterTransition() {}
public void finishActivity(int requestCode) {}
说明:该方法强制关闭通过方法 startActivityForResult (Intent, int) 启动的 Activity,也就是说在 Activity1 中的(重写)方法onActivityResult(int requestCode, int resultCode, Intent data) 来接收 Activity2 返回的结果,必须在 Activity1 中调用finishActivity (int requestCode)来结束 Activity2。(一般在onActivityResult 方法调用该方法结束 Activity2)。
public void finishActivityFromChild(@NonNull Activity child, int requestCode) {}

35、public boolean releaseInstance() {}
说明:释放activity实例以回收内存,返回true表示正在回收实例,false表示无法回收可能是因为该activity正在显示或者已经被destroyed/finished。

36、protected void onActivityResult(int requestCode, int resultCode, Intent data) {}

public PendingIntent createPendingResult(int requestCode, @NonNull Intent data,int flags) {}
说明:用于创建一个延时响应的Intent,如通知栏消息点击之后跳转至某个activity。Service和广播接受者均有类似的方法。

public void onActivityReenter(int resultCode, Intent data) {}
说明:This method will only be called if the activity set a result code other than {@link #RESULT_CANCELED} and it supports activity transitions with {@link Window#FEATURE_ACTIVITY_TRANSITIONS}.

37、public void setRequestedOrientation(@ActivityInfo.ScreenOrientation int requestedOrientation) {}
public int getRequestedOrientation() {}
说明:屏幕的方向相关方法,竖或横屏

38、public boolean moveTaskToBack(boolean nonRoot) {}
说明: nonRoot=false→ 仅当activity为task根(即首个activity例如启动activity之类的)时才生效,nonRoot=true→ 忽略上面的限制这个方法不会改变task中的activity中的顺序,效果基本等同于home键。
作用:比如有些activity诸如引导图之类的,用户在按返回键的时候你并不希望退出(默认就finish了),而是只希望置后台,就可以调这个方法

39、public final void runOnUiThread(Runnable action) {
        if (Thread.currentThread() != mUiThread) {
            mHandler.post(action);
        } else {
            action.run();
        }
    }
说明:作用就是使当前执行的方法在UI线程上执行。

40、public boolean shouldUpRecreateTask(Intent targetIntent) {}
说明:调用此方法是用来查询一个合层的回栈是否必须为了导航来创建。如果一个合成的栈需要被创建就返回true,如果该堆栈存在就返回false。
public Intent getParentActivityIntent() {}
说明:调用这个方法类获得启动在逻辑上是当前activity的父类的Intent。 

41、public boolean requestVisibleBehind(boolean visible) {
        if (!mResumed) {
            // Do not permit paused or stopped activities to do this.
            visible = false;
        }
        try {
            mVisibleBehind = ActivityManagerNative.getDefault()
                    .requestVisibleBehind(mToken, visible) && visible;
        } catch (RemoteException e) {
            mVisibleBehind = false;
        }
        return mVisibleBehind;
    }
说明:由源码可以看到,该方法只有在activity的生命周期为resume时调用才有效果,当设置为true时,onVisibleBehindCanceled方法会回调。
public void onVisibleBehindCanceled() {}
说明:回调时机为onPause --> onWindowFocusChanged --> onVisibleBehindCanceled --> onSaveInstanceState --> onStop,官方文档:Called when a translucent activity over this activity is becoming opaque or another activity is being launched.
注意:When this method is called the activity has 500 msec to release any resources it may be using while visible in the background.注意如果超过了500毫秒,会直接导致app崩溃。

42、public void startLockTask() {}
说明:固定屏幕,使用该方法时用户不能切换其他app。实际上就是锁定当前的task。
public void stopLockTask() {}
说明:关闭固定屏幕。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值