如何在活动之间传递信息

时间:2012-06-15 13:44:06

标签: android android-intent

我已经在这里问了几次这个问题,但仍然没有足够的信心开始把东西扔进我的代码中,因为我害怕我会破坏它已有的功能。

我想要做的是与我可以发送/接收数据的设备建立蓝牙连接,并且能够从多个不同的活动访问它。我知道可以使用Intent,但任何人都可以尝试解释Intent是如何工作的吗?

我不明白如何从一个Activity开始,如何在该Activity中构建一个对象,然后结束它,并且仍然拥有该对象。当我在下面的Activity中调用intent时,如何访问它?

我找不到Activity的示例代码,其中自定义对象通过intent传递,在另一个Activity中打开,然后再次通过另一个Activity,依此类推。我能找到的就是字符串,int的东西,似乎这些方法是针对特定对象的硬编码。

非常感谢任何帮助,谢谢。

3 个答案:

答案 0 :(得分:2)

如果要将自定义对象从Activity传递给另一个,则您的对象必须实现Parcelable接口。

Here你可以找到一个实现Parcelable的对象的例子。  获得此对象的实例后,可以将其添加到intent中并将其传递给其他活动。

假设您有2项活动:A和B. 如果要将自定义对象从A发送到B,请尝试将parceable对象放入intent中,然后将其返回到Activity B中。

// Activity A
Notebook myNotebook = new Notebook(); // the "Parcelable" object
Intent intent = new Intent(A.this, B.class);
intent.putExtra("object", myNotebook);
startActivityForResult(intent);

// Activity B
// in onCreate method
Notebook notebook = intent.getParcelableExtra("object");

答案 1 :(得分:1)

有一个很好的理由你没有找到转移复杂对象的好例子:你不要想那么多。可以使用intent传递额外的任何对象,声明要传输的类作为实现Serializable或Parcalable。

但是 - 除非你有充分的理由,否则不建议这样做。 有无限的方法来创建“交叉活动”对象(数据库,singeltones,服务..),并且在意图中传递复杂的对象是繁重的操作。这也是令人沮丧的表演。

无论如何 - 如果你想要这样做,就是这样:

这是如何传递可谓的对象:

Intent intent =  new Intent();
    intent.putExtra(name, someInstanceOfClassWhichImplementsSerializableInterface);

这是如何在其他活动上实现它:

getIntent().getSerializableExtra(name);

关于在完成活动后你不理解对象仍然存在的问题 - finish()活动不会触发干扰器!!!,但会触发onDestoy()回调 。系统决定何时正确调用活动分散注意力,即使是分心者 - 它也不会阻止Intent对象保持活力 - 因为没有人说你的活动是唯一一个持有它的人。系统保留的意图参考,用于将其传递给随之打开的新活动。

答案 2 :(得分:1)

使用intent可以发送序列化对象,就像将对象转换为字节流一样。如果要按原样发送对象,可以使用处理程序。 e.g。

  1. 使用服务(Android服务)
  2. 创建蓝牙连接
  3. 在您的活动中定义处理程序,它将是静态对象
  4. 从服务发送对象添加到msg.obj发送该消息到处理程序