Android四大组件之一:Activity详解

一、什么是activity

     Activity 是用户接口程序,原则上它会提供给用户一个交互式的接口功能。它是 android 应用程序的基本功能单元。Activity是单独的,用于处理用户操作, Activity 本身是没有界面的, 但activity类创建了一个窗口,可以通过setContentView(View)接口把UI放到activity创建的窗口上,用于显示View。既然Activity是一个与用户交互的系统模块,几乎所有的Activity都是和用户进行交互的,但是如果这样就能说Activity主要是用来显示View就不太正确了。

 

二、activity生命周期

  

View Code
复制代码
public class Activity extends ApplicationContext {

protected void onCreate(Bundle savedInstanceState);
 
protected void onStart();
 
protected void onRestart();
 
protected void onResume();
 
protected void onPause();
 
protected void onStop();
 
protected void onDestroy();

}
复制代码

由图可知:

在一个Activity正常启动过程中,这些方法调用的顺序是onCreate -> onStart -> onResume;在Activity结束的时候方法顺序是onPause -> onStop -> onDestroy,此为一个完整的生命周期。那么对于中断处理(比如电话来了),则是onPause -> onStop,恢复时onStart -> onResume;如果当前应用程序的是一个Theme为Translucent(半透明) 或者Dialog 的Activity那么中断就是onPause ,恢复的时候onResume。

下表更详细的介绍了生命周期函数的事项。

方法

描述

完成后可杀掉?

下一个

onCreate()

当activity被创建时调用。这是做一般的静态初始化的地方,比如创建界面,把数据绑定到列表,等等之类。这个方法会被传入一个Bundle对像,它包含了activity的上一次(关闭时)的状态(如果这个状态可以得到)。此方法后面永远跟着onStart()。

onStart()

onRestart()

在停止后被调用,但不是停止后马上调用,而是在再次开始前调用,也就是在再次调用onStart()之前立即调用。

onStart()

onStart()

当activity变成可见后立即调用它。如果activity成为最上层,则调用onResume(),如果完全被摭盖,就调用onStop()。

onResume()或onStop()

onResume()

当activity处于最上层时,立即调用此方法。此时activity获得输入焦点。后面跟着onPause()。

onPause()

onPause()

当另一个activity要进入Pause状态时调用此方法。这个方法一般是用来提交那些发生改变的永久化的数据们,停止动画和其它消耗CPU的玩意们。这些工作必须以最快的速度完成,因为在这个方法返回之前,另一个activity就不能进入resume状态。当它又回到最上层时,后面跟着onResume(),当它被完全摭盖时,后面跟着onStop()。

onResume()

or

onStop()

onStop()

当activity被完全摭盖时被调用。当activity要销毁时或被其它activity完全摭盖时都会发生。如果这个activity又回到最上层,则后面跟着onRestart(),如果它逝去了,则跟着onDestroy()。

onRestart()

or

onDestroy()

onDestroy()

在activity销毁之前被调用。这是activity能收到的最后一个调用。调用的原因可能是别人在这个activity上调用了finish(),也可能是系统为了更多的内存空间而把它所在的进程处死了。在这个方法中,可以调用isFinishing()来判断自己属于哪一种死法。

nothing

 

三、Activity 栈

Android 是通过一种 Activity 栈的方式来管理 Activity 的,一个 Activity 的实例的状态决定它在栈中的位置。处于前台的 Activity 总是在栈的顶端,当前台的 Activity 因为异常或其它原因被销毁时,处于栈第二层的 Activity 将被激活,上浮到栈顶。当新的 Activity 启动入栈时,原 Activity 会被压入到栈的第二层。一个 Activity 在栈中的位置变化反映了它在不同状态间的转换。Activity 的状态与它在栈中的位置关系如下图所示:

 Activity 的状态与它在栈中的位置关系

如上所示,除了最顶层即处在 Active 状态的 Activity 外,其它的 Activity 都有可能在系统内存不足时被回收,一个 Activity 的实例越是处在栈的底层,它被系统回收的可能性越大。系统负责管理栈中 Activity 的实例,它根据 Activity 所处的状态来改变其在栈中的位置。

 

四、创建Activity

在 android 中创建一个 Activity 是很简单的事情,编写一个继承自 android.app.Activity的 Java 类并在 AndroidManifest.xml声明即可。下面是一个为了研究 Activity 生命周期的一个 Activity 实例:

Activity 文件:

 public class SampleActivity extends Activity { 
    private static final String LOG_TAG = SampleActivity.class.getSimpleName(); 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);      
        setContentView(R.layout.main); 
        Log.e(LOG_TAG, "onCreate"); 
    } 
   @Override 
    protected void onStart() { 
        Log.e(LOG_TAG, "onStart"); 
        super.onStart(); 
    } 
    @Override 
    protected void onResume() { 
        Log.e(LOG_TAG, "onResume"); 
        super.onResume(); 
    } 
    @Override 
    protected void onPause() { 
        Log.e(LOG_TAG, "onPause"); 
        super.onPause(); 
    } 
    @Override 
    protected void onStop() { 
        Log.e(LOG_TAG, "onStop"); 
        super.onStop(); 
    } 
    @Override 
    protected void onDestroy() { 
        Log.e(LOG_TAG, "onDestroy "); 
        super.onDestroy(); 
    } 
 }
AndroidManifest.xml 中通过 <activity> 节点说明 Activity,将 apk 文件安装后,系统根据这里的说明来查找读取 Activity,本例中的说明如下:
 <activity android:name=".SampleActivity" android:label="@string/app_name"> 
	 <intent-filter> 
		 <action android:name="android.intent.action.MAIN" /> 
		 <category android:name="android.intent.category.LAUNCHER" /> 
	 </intent-filter> 
 </activity>

一个<activity>元素也能指定多种intent filters--使用<inetent-filter>元素--为了声明其它应用程序可以激活它。

 

        你可以开启另一个activity通过startActivity(),传递一个Intent描述了你希望启动的Activity。Intent指定要么准备的activity你希望启动或描述你希望完成的动作。一个intent可以传输小量数据被启动的activity使用。你可以这么通过创建一个intent显示的定义你希望启动的activity,使用类名。例如,下面显示一个activity怎么启动另一个activity命名为SignInActivity:

  

       

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GeoPandas是一个开源的Python库,旨在简化地理空间数据的处理和分析。它结合了Pandas和Shapely的能力,为Python用户提供了一个强大而灵活的工具来处理地理空间数据。以下是关于GeoPandas的详细介绍: 一、GeoPandas的基本概念 1. 定义 GeoPandas是建立在Pandas和Shapely之上的一个Python库,用于处理和分析地理空间数据。 它扩展了Pandas的DataFrame和Series数据结构,允许在其中存储和操作地理空间几何图形。 2. 核心数据结构 GeoDataFrame:GeoPandas的核心数据结构,是Pandas DataFrame的扩展。它包含一个或多个列,其中至少一列是几何列(geometry column),用于存储地理空间几何图形(如点、线、多边形等)。 GeoSeries:GeoPandas中的另一个重要数据结构,类似于Pandas的Series,但用于存储几何图形序列。 二、GeoPandas的功能特性 1. 读取和写入多种地理空间数据格式 GeoPandas支持读取和写入多种常见的地理空间数据格式,包括Shapefile、GeoJSON、PostGIS、KML等。这使得用户可以轻松地从各种数据源中加载地理空间数据,并将处理后的数据保存为所需的格式。 2. 地理空间几何图形的创建、编辑和分析 GeoPandas允许用户创建、编辑和分析地理空间几何图形,包括点、线、多边形等。它提供了丰富的空间操作函数,如缓冲区分析、交集、并集、差集等,使得用户可以方便地进行地理空间数据分析。 3. 数据可视化 GeoPandas内置了数据可视化功能,可以绘制地理空间数据的地图。用户可以使用matplotlib等库来进一步定制地图的样式和布局。 4. 空间连接和空间索引 GeoPandas支持空间连接操作,可以将两个GeoDataFrame按照空间关系(如相交、包含等)进行连接。此外,它还支持空间索引,可以提高地理空间数据查询的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值