2024年安卓最全Android组件间通信:Intent的用法_android 组件 通讯,腾讯面试比例

如何成为Android高级架构师!

架构师必须具备抽象思维和分析的能力,这是你进行系统分析和系统分解的基本素质。只有具备这样的能力,架构师才能看清系统的整体,掌控全局,这也是架构师大局观的形成基础。 你如何具备这种能力呢?一是来自于经验,二是来自于学习。

架构师不仅要具备在问题领域上的经验,也需要具备在软件工程领域内的经验。也就是说,架构师必须能够准确得理解需求,然后用软件工程的思想,把需求转化和分解成可用计算机语言实现的程度。经验的积累是需要一个时间过程的,这个过程谁也帮不了你,是需要你去经历的。

但是,如果你有意识地去培养,不断吸取前人的经验的话,还是可以缩短这个周期的。这也是我整理架构师进阶此系列的始动力之一。


成为Android架构师必备知识技能

对应导图的学习笔记(由阿里P8大牛手写,我负责整理成PDF笔记)

部分内容展示

《设计思想解读开源框架》

  • 目录
  • 热修复设计
  • 插件化框架设计

    《360°全方面性能优化》
  • 设计思想与代码质量优化
  • 程序性能优化

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

意图可以用来向Android系统发送广播消息广播接收机可以注册到事件,并在发送此类事件时收到通知。

您的应用程序可以注册到系统事件中,例如,新邮件已到达、系统启动完成或收到电话呼叫并做出相应反应。

2.活动之间的数据传输

2.1.数据传输到目标组件

意图包含某些头数据,例如所需的操作、类型等。可选地,意图还可以包含基于Bundle类,该类可以通过 getExtras()方法

也可以将数据直接添加到Bundle通过超载 putExtra()方法Intent object。附加项是键/值对。类型始终是字符串。作为值,可以使用基元数据类型(int ,float, …) plus类型的对象String ,Bundle ,Parcelable和可序列化 .

接收组件可以通过Intent object上的getAction ( )和getData ( )方法访问这些信息。这个Intentobject可以通过getIntent ( )方法进行检索。

接收意图的组件可以使用getIntent().getExtras()方法调用以获取额外数据。下面的代码片段演示了这一点。

Bundle extras = getIntent().getExtras();
if (extras == null) {
    return;
}
// get data via the key
String value1 = extras.getString(Intent.EXTRA_TEXT);
if (value1 != null) {
    // do something with the data
}

2.2.从子活动中检索结果数据

活动可以通过手机上的后退按钮关闭。在这种情况下finish()方法被执行。如果活动是用startActivity(Intent)方法调用时,调用方不需要来自现在已关闭的活动的结果或反馈。

如果你用startActivityForResult()方法调用时,需要子活动提供反馈。子活动结束后onActivityResult()你可以根据结果调用sub actions。

在startActivityForResult()方法调用您可以指定一个结果代码来确定您启动了哪个活动。此结果代码将返回给您。已启动的活动还可以设置一个结果代码,调用者可以使用该代码来确定活动是否已取消。
子活动使用finish()方法来创建新的意图并将数据放入其中。它还通过setResult()方法调用

下面的示例代码演示如何触发意图和startActivityForResult()方法

public void onClick(View view) {
    Intent i = new Intent(this, ActivityTwo.class);
    i.putExtra("Value1", "This value one for ActivityTwo ");
    i.putExtra("Value2", "This value two ActivityTwo");
    // set the request code to any code you like,
    // you can identify the callback via this code
    startActivityForResult(i, REQUEST_CODE);
}

如果你使用startActivityForResult()方法,然后开始活动被称为子活动 .

如果子活动完成,它可以通过意图这是在finish()方法

@Override
public void finish() {
    // Prepare data intent
    Intent data = new Intent();
    data.putExtra("returnKey1", "Swinging on a star. ");
    data.putExtra("returnKey2", "You could be better then you are. ");
    // Activity finished ok, return the data
    setResult(RESULT_OK, data);
    super.finish();
}

子活动完成后onActivityResult()调用中的方法活动被称为

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
        if (data.hasExtra("returnKey1")) {
            Toast.makeText(this, data.getExtras().getString("returnKey1"),
                Toast.LENGTH_SHORT).show();
        }
    }
}

3.通过意向过滤器注册意向

意图是用来向Android系统发出某种事件已经发生的信号。意图通常描述应该执行的操作,并提供执行该操作的数据。例如,您的应用程序可以通过intent为某个URL启动浏览器组件。下面的例子说明了这一点。

String url = "https://www.vogella.com/";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);

但是Android系统如何识别能够对某种意图做出反应的组件呢?

组件可以通过意向过滤器对于特定的操作和特定的数据。意图过滤器指定活动、服务或广播接收器可以通过声明组件的功能来响应的意图类型。
Android组件在 AndroidManifest.xml或者在广播接收器的情况下也可以通过代码动态地进行。它的数据由一个意图过滤器定义。它也可以包含额外的元数据。

如果一个意图被发送到Android系统,Android平台将运行一个接收器确定。它使用意图中包含的数据。如果多个组件注册了同一个意图过滤器,用户可以决定应该启动哪个组件。

您可以通过意向过滤器为某些事件注册Android组件。如果一个组件没有定义一个组件,它只能通过显式意图调用。本章提供了一个注册意图组件的示例。注册的关键是组件注册正确的操作、mime类型并指定正确的元数据。

如果您将这样的意图发送到您的系统,Android系统将为该意图确定所有注册的Android组件。如果已经为此目的注册了多个组件,则用户可以选择应该使用哪个组件。

3.1.示例:将活动注册为浏览器

以下代码将注册活动对于意图当有人想打开一个网页时会触发。

<activity android:name=".BrowserActivitiy"
          android:label="@string/app_name">
  <intent-filter>
     <action android:name="android.intent.action.VIEW" />
     <category android:name="android.intent.category.DEFAULT" />
     <data android:scheme="http"/>
  </intent-filter>
</activity>

3.2.示例:为共享意向注册活动

以下示例为注册活动ACTION_SEND意图。它声明自己只与文本/纯文本mime类型

<activity
    android:name=".ActivityTest"
    android:label="@string/app_name" >
    <intent-filter>
      <action android:name="android.intent.action.SEND" />

      <category android:name="android.intent.category.DEFAULT" />

      <data android:mimeType="text/plain" />

    </intent-filter>

</activity>

如果组件未定义意图过滤器,则只能通过显式意图调用它。

来自:https://www.vogella.com/tutorials/AndroidIntent/article.html#starting-activities-or-services

最后

如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。

结尾

我还总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料分享给大家。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

image

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

1202)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值