`

Android重要类学习之——Activity

 
阅读更多

Android重要类学习之——Activity


NOTE:大家可以到这里http://www.docin.com/p1-240628976.html下载word版的,csdn这个显示不给力。。

这是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线程中运行。

哦哦哦。。。终于完了 。。前后弄了很长时间了。希望大家 支持。想到学习。共同进步 。。然后,今天 是七夕,祝来我博客 的童鞋节日快乐,单身的早日找到另一半。。。


PS:因为是用word写完复制 到这的,所以效果并不好,我已经把word版的上传到豆丁了,大家 可以在这里http://www.docin.com/p1-240628976.html下载。。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics