2017-03-09 9 views
0

アクティビティ内のmyクラスのインスタンスをロードするために、クラス参照をインテントに渡したいとします。 クラスへの「参照」を書いたと考えてください。別のインスタンスであってはいけません。すべての指示に従って、私はクラスを渡すことができたが、それは最終的に別のインスタンスです。Android:インテントへのクラス参照の受け渡し方法

intent.putExtra("idletime", idle); 

アイドルは私のクラスですが参考にしたいと思います。

idle_ = getIntent().getParcelableExtra("idletime"); 

を、参照が新しい私のクラスのインスタンスではなく、私が通過しようとした同じクラスのインスタンスのためにあるようだ: とどこ私はそれを取得しています。

これは、クラス定義であるが、私はそれほど重要ではないと思います。間違った

public class idletime extends AsyncTask<Object, Integer, Boolean> implements Parcelable {} 

は何か?

+0

インテントで参照を渡すことはできません。それはコピーになります –

答えて

3

しかし、参照は私のクラスの新しいインスタンスで、私が渡そうとした同じクラスのインスタンスではないようです。正しい動作です

putExtraは、getParcelableExtraはバイナリ形式からクラスをデシリアライズし、この方法は、新しいインスタンスを作成し、(シリアライズ)バイナリ形式にあなたのクラスを変換します。

+0

私はそれが期待されていることを知ってうれしいです。しかし、私のニーズは元のクラスへの参照を渡しています。私は通常C++で動作しますが、Javaはいつか私に暗闇を持っています。 –

+0

@AndreaGuglielmi Javaはポインタへの直接アクセスを許可しませんし、それでも、シリアル化と非直列化の間でオブジェクトがガベージコレクションされるとどうなりますか?元のインスタンスをあまりにも欲しければ、 'Map'を作成し、オブジェクト自体ではなくオブジェクトへのキーを直列化する必要があります。 – user1643723

+0

@AndreaGuglielmiこの参照は、ある種のクラス(静的なフィールドの形、好ましくはApplication derived)の形で保存し、C++と同じ方法でこのフィールドにアクセスすると、クラスの静的変数にアクセスする必要があります。あなたはそれを慎重にする必要があります。なぜなら、Androidはいつでもあなたのプロセスを殺すことが許されているからです。そして、すべての静的フィールドが失われます。例についてはこちらをご覧ください:http://stackoverflow.com/questions/18002227/why-extend-an-application-class – marcinj

関連する問題