Я всегда думал, что когда я передаю пользовательский объект parcelable
, вызывая getParcelable()
, он вернет совершенно новый объект. Это справедливо, когда я передаю один предмет от одного Activity
другому Activity
, поставив его в Bundle
(Bundle
помещается в Intent
).Android Message.getData(). GetParcelable() не создает новый объект
Но когда я пытаюсь передать предмет с объектами от Activity
к фоновому потоку, к которому присоединяется Handler
, я не получаю новый объект, что означает, если я изменяю значение этого объекта в фоновом потоке , это повлияет на объект в Activity
. Как так? Что я сделал не так?
На этот раз объект помещается в Bundle
Bundle
но ставятся в Message
, это единственное различие, которое я могу найти, когда сравнить пропускание Parcelable
между Activity
.
//simple code sample, overwrite handleMessage() of Handler
public void handleMessage(Message msg) {
SkCounter sc = msg.getData().getParcelable("abc");
sc.testing = 99999; //if I change this value here, the object's value from Activity will change too. getParcelable() should create totally new object and changing value of it shouldn't affect other object, right? But how come this happens?
}
Кто-нибудь знает почему?
Привет, обычно, как я могу узнать, что использование пакета связано с посылкой/unparce или нет? Любая техника, чтобы определить это? – GMsoF
'msg.setData ((Bundle) bundle.clone());' Это не работает :(Почему? – GMsoF
@GMsoF Я думаю, вы не должны полагаться на посылку, чтобы воссоздать свой объект, если вам нужен новый объект, создайте его и передайте его – bladefury