Android Activity详解

来源:互联网 发布:双肩电脑背包 知乎 编辑:程序博客网 时间:2024/04/27 23:48
Android 重要类之——Activity
这是 Android 中的最基本的组件,也是我们最常用的组件,一般情况下,一个 Activity 就代表一个屏幕或者说是窗口,它包含一个或多个视图(View),我们能够与 之进行交互。 Android 系统中的 Acitivity 通过 Acitivity Stack 进行管理。当一个新的 Activity 被启动的时候 ,它就会被放置在栈顶并成为运行的 Activity。一个 Activity 有四个状态:

(1)、Active or Running——Activity 位于栈顶 (2)、Paused——这种状态下,Acitivty 失去焦点,但仍然可见(可能是一个 非全屏的 Activity 或者透明的 Activity 被置于这个 Activity 之上)。 (3)、Stopped——这种状态下的 Activity 就得完全不可见。 (4)、Inactive——当一个曾经被启动过的 Activity 被杀死时,它就变成 inactive。Inactive Activity 会从 Activity 栈中移除,当它重新显示和使用时需要再次 启动。 如果设备的配置(Configuration)改变了,系统 会把当前 的 Activity 销毁 (destroy),然后再创建它的一个新实例。 这篇文章里,我主要 是对 Activity 中一些有用的方法进行摘录,至于那些最常 用 的比如说 onCreate 之类 的生命周期方法这里就略去不提了。

public Intent getIntent() ——获取启动这个Activity的Intent public void setIntent(Intent newIntent) ——执行这个方法后,再调用 getIntent()将返回newIntent public final Application getApplication() ——获取此Activity所属的 Application

public WindowManager getWindowManager() ——

public Window getWindow()

public View getCurrentFocus() ——当前取得焦点的 View

protected void onNewIntent(Intent intent)——如果该 Acitivity 的 launchMode 设置成了 singleTop 或者其他的组件通过 intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)这样的 intent 来启动该 Activity 的时候,如果此 Activity 的实例已经存在了,那么不会再创建新的实例,而是把 已经存在的该 Activity 的实例放到 activity stack 的栈顶。。此时这个方法会被调用 (在 onResume 之前调用)。在这个方法的重写版本中,我们应该调用 setIntent()方法来 更新以使通过 getIntent()获取到的是最新的启动这个 Activity 的 Intent。

protected void onSaveInstanceState(Bundle outState) ——如果这个 Activity 不是在 running 状态,某个时刻可能因为内存原因系统会将其回收掉,再将来某 个时刻再回到这个 Activity 的时候系统会尝试重新创建一个新实例。我们可能希望这个 Activity 在被 回收前我们可以做一些当前用户界面的保存或其他状态的保存,这时我们就 应该重写这个方法,因为这个方法会在 onStop 之前被调用,我们可以通过其参数 outState 来保存状态,在 onCreate(onSavedInstanceState)方法中从 onSavedInstanceState 中获取我们之前保存的状态值来恢复这个 Activity 被 kill 之前 的状态。

protected void onUserLeaveHint()——当一个 Activity 将要进入后台 (background)时被回调。

public void onConfigurationChanged(Configuration newConfig)——请查看 API 文档

public void onLowMemory() ——当整个系统运行一个低内存状态时,这个方法会被调 用 。我们可以重写这个方法来清除一些缓存或者其它的不必要的资源。当这个方法返回的时 候 ,系统会进行一次垃圾回收

public final Cursor managedQuery(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Cursor c = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder); if (c != null) { startManagingCursor(c); } return c; }——从这个方法的实现中我们可以看出它除了获取一个ContentResolver实例来实现 查询外,该Activity还会根据它的生命周期对返回的Cursor对象的生命周期进行管理。举个 例子说,当此Activity重新启动的时候,会调用Cursor对象的requery方法以相同的参数 来重新进行查询。

public final void setDefaultKeyMode(int mode)——用来设置Activity的默认按

键模式,也就是说当Activity中发生了一些按键事件,但是没有任何Listener来响应的时候就执 行这里mode设置的动作,mode的值可以是以下5个之一: DEFAULT_KEYS_DISABLE,DEFAULT_KEYS_DIALER,DEFAULT_KEYS_SHORTCUT, DEFAULT_KEYS_SEARCH_LOCAL,DEFAULT_KEYS_SEARCH_GLOBAL

public void onBackPressed() { finish(); }——按back键时会被调用 ,默认情况下是结束当前Activity的生命,但是我们可以 重写这个方法来实现我们想要的操作。

public boolean onTouchEvent(MotionEvent event) { return false; }——用来处理屏幕触摸事件,如果被触摸到的View没有处理这个事件的话,这个方法会 被调用(当然了它必须得返回true了)。提到这个方法,我们有必要再说下这个方法: public boolean onTouch(View v, MotionEvent event),这个方 法是定义在View.OnTouchListener这个接口中的,一般我们可以通过 view.setOnTouchListener()来设定这个此监听器。我们可以看到这个方法的参 数表中还有一个View类型的参数,这个是用来获取触摸事件的发生源的。还有,如果 一个触摸事件发生在了同一个View上,而这个View设置了OnTouchListener,那么 只有onTouch()方法返回false的时候 onTouchEvent()才会被调用。

public boolean onTrackballEvent(MotionEvent event) { return false; }

public void addContentView(View view, ViewGroup.LayoutParams params) ——看名字,原来通过serContentView(View)设置的view不会被移除。 public void onContentChanged() ——当调用setContnetView或 addContentView时这个方法会被调用。

public boolean onCreateOptionsMenu(Menu menu) ——我们会重写这个方法来创 建选项菜单,这个方法只会被系统调用一次(菜单第一次显示时)。

public boolean onPrepareOptionsMenu(Menu menu)+——每次菜单显示前都会调用 这个方法,因此如果我们想在菜单显示前根据某些条件更新菜单内容,可以重写这个方法。

public void onOptionsMenuClosed(Menu menu) ——看名字哈。。

public void openOptionsMenu() public void closeOptionsMenu() 通过程序的方法打开/关闭菜单

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)——创建上下文菜单,每次上下文菜单将要显示的时候都会 调用这个方法。 public void registerForContextMenu(View view) ——为某个View注册上下文菜 单。 public void unregisterForContextMenu(View view) ——阻止在view上显示上下 文菜单

public void openContextMenu(View view) public void closeContextMenu() 闭上下文菜单 通过程序调用的方式来打开或者关

public boolean onSearchRequested() { startSearch(null, false, null, false); return true; }——响应搜索请求信号

public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData, boolean globalSearch) ——用来启动搜 索的UI界面,经常在onSearchRequest()方法中调用 public void takeKeyEvents(boolean get)——即使在Activity中没有取得 焦点的 View,也会处理此按键事件。

public final boolean requestWindowFeature(int featureId) { return getWindow().requestFeature(featureId); }——常用的featureId有:FEATURE_NO_TITLE,FEATURE_PROGRESS, FEATURE_LEFT_ICON, FEATURE_INDETERMINATE_PROGRESS,这些静态常量都定义在Window类中

public final void setFeatureDrawableResource(int featureId, int resId) ————featureId定义在Window类中,resId是我们放在res目录下的图片资源ID。这个 方法必须在requestWindowFeature调用之后才能使用。 。 public final void setFeatureDrawableUri(int featureId, Uri uri)——同 上

public LayoutInflater getLayoutInflater() public MenuInflater getMenuInflater()——这两个方法也很有用,我们可以通过它 们获取Inflater然后来解析布局文件来返回View或产生menu

public void startActivityForResult(Intent intent, int requestCode)— —对于这个方法有几点 要注意:如果requestCode的值小于0,这个方法的作用就和 startActivity一样了,也就是说不会返回值。如果你要启动的Activity和此Activity不 在一个task中,那么会马上收到一个RESULT_CANCELED的responseCode。

public void startActivity(Intent intent) { startActivityForResult(intent, -1); }——最常用的方法之一及其实现 。。

public boolean startNextMatchingActivity(Intent intent)——这个方法一般 这样用。。onCreate(){ ... boolean has =startNextMatchingActivity(getIntent()); if(has){ finish(); } ... }

public String getCallingPackage() public ComponentName getCallingActivity()

public void finishActivity(int requestCode)——关闭之前通过 startActivityForResul(intent,requestCode)调用的Activity(们)。。

public void setRequestedOrientation(int requestedOrientation)——改就 能当前Activity的屏幕朝向,requestedOrientation是定义在ActivityInfo中的静态 常量。

public int getTaskId() ——此Activity所在的Task的ID。这里给出Task的官方定 义 :A task is a collection of activities that users interact with when performing a certain job. The activities are arranged in a stack (the "back stack"), in the order in which each activity is opened. public boolean isTaskRoot() ——如果此Activity是所在Task中的第一个 Activity返回true.

public boolean moveTaskToBack(boolean nonRoot)——把这个Activity所在的 Task移到后台(background,此时将回到Home或者之前的Task)。nonRoot为false时,只 有isTaskRoot()返回true时这个方法才会起作用。

public String getLocalClassName()——获得这个类的名字,不带限定名 public ComponentName getComponentName()

public SharedPreferences getPreferences(int mode)——获得的 SharedPerference只属于这个Activity。

public void setTitle(CharSequence title) public void setTitle(int titleId) public void setTitleColor(int textColor)——对标题栏的一些设置,也有对应的 getter方法

public final void setProgressBarVisibility(boolean visible)——设置标 题栏中ProgressBar的可见性。 public final void setProgressBarIndeterminateVisibility(boolean visible) public final void setProgressBarIndeterminate(boolean indeterminate) ——设置为进度不确定的. public final void setProgress(int progress)——progress的取值范围为 0~10000 public final void setSecondaryProgress(int secondaryProgress)

public final void setVolumeControlStream(int streamType)—— streamType可取值是定义在AudioManager静态常量,例如STREAM_MUSIC, STREAM_NOTIFICATION, STREAM_VOICE_CALL等。这个方法就是用来设置声音控制按钮 控制的声音的类型的。这个方法有相应的getter。

public final void runOnUiThread(Runnable action)——action这个任务将在 UI线程中运行。
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 三年级字写不好怎么办 7小孩表达能力差怎么办 孩子考了低分怎么办 初一考300分怎么办 小学三年级成绩不好怎么办 五年级考几分怎么办 思想晚熟的人怎么办 孩子学不好数学怎么办 做作业速度慢怎么办 孩子碎头发太多怎么办 孩子碎发太多怎么办 孩子的作业太多怎么办 爸爸是乙肝孩子怎么办 孩子出生没有奶怎么办 顺产后没有奶水怎么办 还在经常逃课怎么办 老板不重视自己怎么办 孩子不听话爱撒谎怎么办 老师针对我孩子怎么办 小孩动不动就哭怎么办 孩子太拧应该怎么办 孩子贪玩不爱学习怎么办 高二了还不学怎么办 小朋友不喜欢上幼儿园怎么办 一岁半的宝宝不听话怎么办 老公是个窝囊废怎么办 幼儿园老师不喜欢家长怎么办 老师讨厌学生了怎么办 一个舍友很讨厌怎么办 家长对老师不满怎么办 教师被家长辱骂怎么办 如果老师喜欢自己怎么办 孩子不思进取逃避学习怎么办 老师拿孩子泄愤怎么办 老师对小孩不好怎么办 孩子被老师骂怎么办 孩子幼儿园被打怎么办 两个家长吵架老师怎么办 家长和老师矛盾怎么办 孩子特别害怕老师怎么办? 老师排挤孤立孩子怎么办