長期実行タスクを持つアプリケーションがあります。タスクオブジェクトは安全にApplicationオブジェクトに移動されます。しかし、まだ、私はUIを更新する必要があります。これまでのところ、タスクは実際には長時間実行されているため、ユーザーは別のアクティビティに移動でき、現在のアクティビティは破棄される可能性がありますが、タスクは引き続き機能します。 これで、タスクが完了した後、アクティビティのUIを変更したいと思います。しかし、これは活動の新しい例かもしれないし、活動が破壊されるかもしれない。しかし、もしそれが生きていれば(どのインスタンスに関係なく)私はこの変更をしたい。これは私が必要なものを擬似コードです:名前でアクティビティインスタンスを取得する(実行中の場合)
MyActivity act = SomeActivityManager.get(MyActivity.class.name());
if(act == null) {
// the activity is destroyed, no action needed,
// on next creating all UI changes will be in place
} else {
act.drawRedLine(); // custom method of my activity
}
そして、私は(まだ私はApplicationオブジェクト内のすべての活動にWeakHashMap
で行くことができますが、これは間違いなく、潜在的な問題と汚い方法です)アンドロイド-SDKベースのソリューションを好みます。
長時間実行されているタスクをサービス内でホストしていないのはなぜですか? – Enzokie
アクティビティの更新については、その参照が必要です。システムがアクティビティを再作成し、参照が無効になる可能性があるため、参照を保持できません。また、メモリリークが発生します。だから私は本当のアクティブな参照が必要です。それは約質問です。 – msangel
アクティビティが現在表示されていない場合は、レンダリングを停止する必要があります(現在のアクティビティがアニメーション化されている場合は非常に最悪の場合があります)。状態や数学的な論理/計算をホストすることは簡単ですが、最後にはホストからの最後の値をonStart()の間に再レンダリングすることができます。その時点でActivity参照を取得できます。 – Enzokie