IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android开发自学第一天 -> 正文阅读

[移动开发]Android开发自学第一天

Intent

Intent是Android程序中各组件间进行交互的一种重要方式,它不经可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据,Intent一般可被用于启动活动,启动服务以及发送广播等场景,具体的介绍可以参考http://3ms.huawei.com/km/blogs/details/9654795,Intent大致可以分为显示Intent隐式Intent,Intent有多个构造函数的重载,其中一个是Intent(Context packageContext,Class<?>cls),这个构造函数接收两个参数,第一个参数Context要求提供一个启动活动的上下文,第二个参数Class则是指定想要启动的目标活动。

显示Intent

显示Intent时直接在创建Intent对象时传入上下文和目标活动,目前很明确,显示Intent的具体使用示例,通过点击按钮转入到第二个活动的交互。
修改FirstActivity按钮的点击事件,代码如下:

button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(FirstActivity.this, SecondActivity.class)

                startActivity(intent);
            }
        });

FirstActivity.this作为上下文,SecondActivity.this作为目标活动,通过startActivity()方法启动这个Intent.

隐式Intent

隐式Intent它并没有明确指出要启动那个活动,而是指定一系列更为抽象的action和category信息。然后交由系统去分析这个Intent.并帮助我们去找出合适的活动执行。隐式Intent通过在标签下配置内容来指定当前活动能够响应的action和category,在AndroidManifest.xml中进行配置,代码如下:

 <activity
                android:name=".SecondActivity"
                android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="com.example.activitytest.ACTION_START"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

在标签中我们指明了当前活动可以响应com.example.activitytest.ACTION_START这个action,标签则包含了附加信息,只有和中的内容同时能够满足匹配Intent指定的action和category时,这个活动才能响应intent.按钮点击事件代码如下:

button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //隐式intent
                Intent intent = new Intent("com.example.activitytest.ACTION_START")
                startActivity(intent);
            }



        });

还有更多隐式Intent的用法,比如使用隐式Intent来启动自己程序内的活动,还可以启动其他程序的活动。这使得Android多个应用程序之间的功能共享成为了可能。
示例1.通过按钮点击事件来调用系统的浏览器。

button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("http://www.baidu.com"));
                startActivity(intent);
            }



        });

Intent的其他应用

  1. 向下一个活动传递数据
    Intent中提供了一些列putExtra()方法的重载,可以把我们想要的传递的数据暂存在Intent中,启动了另一个活动后,只需把这些数据再从Intent中取出就可以了。示例,从FirstActivity传递一个字符串给SecondActivity中。
button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //向下一个活动传递数据
                String data = "Hello SecondActivity";
                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                intent.putExtra("extra_data",data);
                startActivity(intent);
            }
        });

从FirstActivity中通过putExtra()传递一个字符串"Hello SecondActivity"到SecondActivity中去,putExtra方法接收两个参数,第一个参数是键,第二个是值。
而在SecondActivity中需要接收传来的信息。代码示例

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_layout);
        Intent intent = getIntent();
        String data = intent.getStringExtra("extra_data");
        Log.d("SecondActivity", data);

    }
  1. 返回数据给上一个活动
    在Activity中还有一个startActivityForResult()的方法用与启动活动,这个方法期望在活动销毁的时候能返回一个结果给上一个活动。startActivityForResult()方法接收两个参数,第一个参数是Intent,第二个参数是请求码。用于在之后的回调中判断数据的来源。
    代码示例,使用startActivityForResult来启动SecondActivity,请求码是1.
button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //返回数据给上一个活动
                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                startActivityForResult(intent,1);

                startActivity(intent);
            }

而对于SecondActivity,需要注册按钮点击事件,并在点击事件中返回数据的逻辑,代码如下:

public class SecondActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_layout);
        //返回调用反馈信息
        Button button2 = (Button) findViewById(R.id.button_2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.putExtra("data_return","Hello FirstActivity");
                setResult(RESULT_OK,intent);
                finish();
            }
        });
    }
}

在startActivity中创建了一个Intent,作用仅仅用于传递数据,将需要传递的数据存放在Intent中,然后调用setResult()方法用于向上一个活动返回数据,setResult()方法接收两个参数,第一参数用于向上一个活动返回处理结果。第二参数则把带有数据的intent传递回去。然后调用finish方法来销毁当前活动。由于使用startActivityForResult方法启动SecondActivity,在SecondActivity被销毁之后会回调上一个活动的onActivityResult方法,因此我们需要重写这个方法来得到返回的数据

  @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        switch (requestCode) {
            case 1:
                if (resultCode == RESULT_OK) {
                    String returnedData = data.getStringExtra("data_return");
                    Log.d("FirstActivity", returnedData);
                }
                break;
            default:

        }

活动的生命周期

Android使用任务(Task)来管理活动,一个任务就是一组存放在栈里的活动的集合。这个栈被称为返回栈(Back Stack)。默认情况下,每当启动一个新的活动时,它会在返回栈中入栈,并处于栈顶中。而当我们按下Back键或调用finish()方法去销毁一个活动时,处于栈顶的活动会出栈。

活动状态

1.运行状态:活动那个处于返回栈栈顶,活动处于运行状态
2.暂停状态:不处于栈顶位置,但仍然可见(如对话框)
3.停止状态:不处于栈顶,并且完全不可见,系统会为这种活动保存相应的状态和成员变量。
4.销毁状态:从返回栈中移除后就变成了销毁状态。系统最倾向于回收这种状态的活动。

活动的生存期

Activity类中定义了7个回调方法,覆盖了活动生命周期的每一个环节
下图时7个方法在活动周期内的位置。

在这里插入图片描述

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-29 11:46:00  更:2021-07-29 11:46:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/2 12:55:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码