Android从零开始之重新认识Activity--基础知识

来源:互联网 发布:java素数判断 编辑:程序博客网 时间:2024/05/26 02:53

一、Activity到底是个什么东西?

Activity作为Android系统中四大组件之一,Activity担负着家庭中男人一样的角色--极其重要。所以有必要对其进行深度学习。首先我们映入脑袋的第一个问题就是:Activity到底是个什么东西?

官方给出的解释如下:
Activity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。 每个 Activity 都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上。
一个应用通常由多个彼此松散联系的 Activity 组成。 一般会指定应用中的某个 Activity 为“主” Activity,即首次启动应用时呈现给用户的那个 Activity。 而且每个 Activity 均可启动另一个 Activity,以便执行不同的操作。 每次新 Activity 启动时,前一 Activity 便会停止,但系统会在堆栈(“返回栈”)中保留该 Activity。 当新 Activity 启动时,系统会将其推送到返回栈上,并取得用户焦点。 返回栈遵循“后进先出”堆栈机制,因此,当用户完成当前 Activity 并按“返回” 按钮时,系统会从堆栈中将其弹出(并销毁),然后恢复前一 Activity。
当一个 Activity 因某个新 Activity 启动而停止时,系统会通过该 Activity 的生命周期回调方法通知其这一状态变化。Activity 因状态变化—系统是创建 Activity、停止 Activity、恢复 Activity 还是销毁 Activity— 而收到的回调方法可能有若干种,每一种回调方法都会为您提供执行与该状态变化相应的特定操作的机会。 例如,停止时,您的 Activity 应释放任何大型对象,例如网络或数据库连接。 当 Activity 恢复时,您可以重新获取所需资源,并恢复执行中断的操作。 这些状态转变都是 Activity 生命周期的一部分。

上面说了很多,一句话总结即:Activity就是一个呈现给用户的界面。

二、如何创建一个Activity?

明白了什么是activity之后我相信,你肯定就迫不及待的想知道如何创建一个Activity了。让我们先看下activity类的继承关系。
这里写图片描述

如果你想创建一个activity,你可以选择直接继承Activity类,如下:

public class MainActivity extends Activity{    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }}

当然你也可以继承其直接之类或者间接子类,如下:

public class MainActivity extends AppCompatActivity{    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }}

当然不论你用那一种方式,你都应该实现onCreate()这个方法。当你做完这些。别忘记在你的AndroidManifst.xml进行对其注册,如下:

<activity android:name="com.poison.helloworld.MainActivity" />

你还应该给你的程序设置有且只有一个主入口,因此还应该做如下的配置:

<activity android:name="com.poison.helloworld.MainActivity" >    <intent-filter>        <action android:name="android.intent.action.MAIN" />        <category android:name="android.intent.category.LAUNCHER" />    </intent-filter></activity>

自此,一个Activity就创建成功了。

三、如何进行activity之间的跳转与数据传递?

当我们成功的创建了activity的时候,是不是就想我要怎么进行activity之间的跳转和数据传递呢?在android中进行activity的跳转和数据都可以使用intent来实现。

首先,安装上面的教程,分别创建两个activity:FirstActivity、SecondActivity,和与之对应的layout:activity_first.xml、activity_second.xml。如下:

这里写图片描述

FirstActivity:

public class FirstActivity extends AppCompatActivity{    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_first);        Button mBtnJump = (Button) findViewById(R.id.btn_jump);        mBtnJump.setOnClickListener(new View.OnClickListener()        {            @Override            public void onClick(View v)            {                Intent intent = new Intent();                intent.setClass(FirstActivity.this, SecondActivity.class);                startActivity(intent);            }        });    }}

SecondActivity:

public class SecondActivity extends AppCompatActivity{    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_second);    }}

activity_first.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical">    <TextView    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="This is first Activity"/>    <Button    android:id="@+id/btn_jump"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="Jump"/></LinearLayout>

activity_second.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical">    <TextView    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="This is Second Activity"/></LinearLayout>

最后在AndroidManifest.xml的application节点里面添加:

<activity android:name=".SecondActivity"/>

“.”表示当前应用程序包名的路径下。运行上面程序你就可以看到页面跳转效果了。

activity之间的跳转:
(1)、显式intent:上面FirstActivity就属于intent的显示调用。这样的写法还有很多种。但是原理都差不多。你也可以简化到一行搞定。

startActivity(new Intent(FirstActivity.this, SecondActivity.class));

(2)、隐式intent:除了在AndroidManifest.xml中增加Activity的声明以外,还需要对应的Intent Filter和Action:

<activity android:name=".SecondActivity">    <intent-filter>        <action android:name="com.poisonh.helloworld.action.SECOND_ACTIVITY"/>        <category android:name="android.intent.category.DEFAULT"/>    </intent-filter></activity>

修改FirstActivity的代码:

Intent intent = new Intent();intent.setAction("com.poisonh.helloworld.action.SECOND_ACTIVITY");startActivity(intent);

重新运行程序,即可看到和上面一样的效果。使用隐式可以跳转其他应用程序。

activity之间的数据传递:

activity数据之前的传递有很多方法,以后专门用一篇来总结。同样我们可以借用intent来实现数据的传递,如下:
修改FirstActivity的代码:

Intent intent = new Intent();intent.putExtra("DATA", "helloworld");intent.setAction("com.poisonh.helloworld.action.SECOND_ACTIVITY");startActivity(intent);

给activity_second.xml中的TextView添加id:

<TextView    android:id="@+id/tv_show"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="This is Second Activity"/>

修改SeondActivity的代码:

@Overrideprotected void onCreate(Bundle savedInstanceState){    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_second);    String data = getIntent().getStringExtra("DATA");    TextView textView = (TextView) findViewById(R.id.tv_show);    textView.setText(data);}

然后运行程序。

自此,我们知道了activity是什么。如何创建activity。以及activity之间的数据传递和跳转。

0 0