Передача сложного объекта в действие

#android #android-activity

#Android #android-activity

Вопрос:

Я работаю с приложением Bluetooth, и у меня есть поток, прослушивающий входные сообщения, и 2 действия: главное меню и консоль Bluetooth. Я устанавливаю соединение в действии меню, а затем мне нужно передать некоторые объекты в действие консоли:

  • ссылка на поток для использования его метода write()
  • контекст из основного действия
  • и логическое значение, которое мне нужно в конечном итоге проверить

Я читал об использовании Intent.putExtra и передаче сериализуемого или разделяемого объекта класса. Я написал класс с объектами, которые мне нужно передать, но я не знаю, как это сделать, или даже что означает serializable и parceable.

Нет ли какого-нибудь простого способа передать эти объекты из действия в другое?

Комментарии:

1. Действия имеют свой собственный контекст, поэтому вам не нужно будет передавать это. getApplicationContext()

2. Верно. Но мне все еще нужен доступ к методам этого потока и логическому

Ответ №1:

Вы могли бы расширить Application и поместить общие объекты в этот класс. Что-то вроде:

 public class MyApplication extends Application {
    private boolean myBoolean;

    public boolean getMyBoolean() { return myBoolean; }
}
  

Вы можете поместить сюда все, что хотите, используя глобальные переменные.

Чтобы настроить приложение вашего приложения на MyApplication, используйте AndroidManifest.xml

 <application ... android:name=".MyApplication">
  

Комментарии:

1. Мне потребовалось некоторое время, чтобы понять, что это был тот же тег приложения, который уже был в манифесте, и не использовал 2 из них. это работает отлично 🙂

Ответ №2:

Короче говоря, ответ. Нет. Activities изолированы друг от друга, потому что они могут охватывать процессы, поэтому единственным переносимым вариантом является их сериализация. Но вы можете использовать библиотеки, такие как Flexjson, для сериализации простых старых Java-компонентов с помощью Intent.putExtra(). Намного проще, чем сериализация от руки с помощью посылок. Проверьте: http://flexjson.sourceforge.net

В Android есть ошибка, из-за которой вам нужно выполнить следующее:

 /** Fix for Android bug http://code.google.com/p/android/issues/detail?id=5697 */
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());