2012-01-26 8 views
2

Androidサービスは、一度に1つ以上のクラスインスタンスが実行されることはないと私は理解しています。だから、線235だからそれは明らかに法的だ、しかし、Googleのアプリ内課金のサンプルで、それは彼らがDungeons.javaで行うまさにだインテントとインスタンスの作成によるAndroidサービスの開始

MyService mse = new MyService(); 

とは反対に、意図を経由してそれらを開始することになっています。

このようなサービスを開始すると、フレームワークは後でそのアプリケーションが実行されていることを認識しますか?つまり、後で同じサービスでstartService()を呼び出そうとすると、フレームワークはサービスのインスタンスが既に存在し、startService()呼び出しをそこにディスパッチすることを認識しますか?

答えて

1

あなたがどのような例を参照しているのか分かりません。しかし、newキーワードを使用して、Androidコンポーネント(ActivityBroadcastReceiverServiceProvider)を自分でインスタンス化することは絶対にできません。これらのコンポーネントは、フレームワークがコンポーネントのContextを設定する必要があるため、Androidフレームワークによってのみインスタンス化できます。

Service s = new MyService();の書き込みを止めることは何もありませんが、それは良いことではありません。 AndroidはServiceのライフサイクルのmathodを決して呼び出すことはなく、Serviceのメソッドに対する呼び出しは、インスタンスにはContextが含まれていないため、おそらく壮観に失敗します。

+1

男の子、それは古い議論です:)私はそれを今まで知っています。最新のSDKでは問題のサンプルを見つけることができないので、質問は本当に問題です。 –

0

アクティビティプロセス内でサービスが実行されることを保証するインテントを使用する代わりに、サービスを直接インスタンス化する場合。その活動が殺されるべきであれば、サービスも下がります。それは悪い習慣ですか?まあ、それはあなたが望むものに依存します。潜在的な活動の停止を生きるためにそのサービスが必要な場合、はい、それは悪いことです。気にしない、またはあなたのアプリがこれらのシャットダウンに耐えられるなら、それは問題ありません。しかし、バックグラウンドジョブを実行する必要がある場合は、アクティビティが停止した後に停止することができ、AsyncTaskとサービスを使用する必要があると主張します。

+0

スレッド/プロセスの側面について話したり、シングルトンに集中したりしないでください。それは私が不思議に思っていることです。質問を編集しました。 –

関連する問題