Разница между двумя случаями заключается в том, что в случае 1 базовый метод DoIt
не становится переопределенным, просто скрытым. Это означает, что в зависимости от типа переменной зависит, какой метод будет вызван. Например:
BaseClass instance1 = new SubClass();
instance1.DoIt(); // Calls base class DoIt method
SubClass instance2 = new SubClass();
instance2.DoIt(); // Calls sub class DoIt method
Это может быть действительно запутанным и приводит к не ожидаемому поведению, и его следует избегать, если это возможно. Таким образом, предпочтительным способом будет случай 2.
У вас есть несколько вариантов:
Parcelable
, который может быть сохранен в дополнительном Serializable
, который может храниться в дополнительном SharedPreferences
) приложение
или локальную службу
Чего вы не хотите делать, так это передавать большие вещи через статистов. Например, если вы создаете приложение, которое снимает изображения с камеры, вы не хотите передавать их в дополнениях - используйте статический член данных (как бы неприятно это ни звучало). Намерения предназначены для работы в разных процессах, что означает, что происходит некоторое копирование данных, которого вы хотите избежать, когда в этом нет необходимости.
Один из известных мне вариантов - это сохранение данных, которые вы используете, в объекте Application, который все ваши действия могут извлечь из контекста.
Я также слышал об использовании Google Protocol Buffer для достижения более производительного решения