3

私は、Android サービスが私の終わりになると確信しています。ここ数日で髪の毛がほとんどなくなりました…。

...とにかく、私は脱線します。

最初は、ボタンのオンクリックでサービスをバインドするのにかなりの時間を費やしていましたが、昨日ここのヘルプから解決しました。ここで、サービスをアクティビティの onCreate() メソッドにバインドする必要があります。その部分は問題なく、意図したとおりに機能します。私のサービスは実際には、私が書いたソケット サーバーに TCP ソケットを接続するためのソケット サービスです。バインドされたサービス mBoundService.StartSocketServer() からメソッドへの呼び出しをボタン クリック内に配置すると、ビンゴがうまく機能します。しかし、アクティビティがロードされたときにすぐに起動する必要があるため、アクティビティの onCreate() メソッド内で bindService() 呼び出しのすぐ下で実行します。onCreate() 内でソケットを開始する呼び出しを行うと、強制終了します。

このメソッド (StartSocketServer()) は新しいスレッドを生成し、そのスレッドのソケットをリモート マシンに開きます。問題は、アクティビティが完全に読み込まれる前の新しいスレッドの生成にあると推測しています...よくわかりません。

LogCat は、ここではかなり不可解です。スレッドのアタッチが失敗したことを示しており、「Caused by: java.lang.NullPointerException」を含むキャッチされていないハンドラー例外を示しています。

繰り返しますが、このメソッドへの呼び出しをボタン クリック内に置くと、私は仕事をしています。onCreate() 内にある場合は失敗します。アクティビティ内に何らかの方法がありますか (私の仮定が正しいと仮定して、完全に新しいスレッドを生成する前に読み込みます)、読み込まれた後に StartSocketServer() を呼び出します: ala body.onLoad() in html?

残りの髪を救うのを手伝ってください:)

ティア

4

1 に答える 1

3

以前の質問で書いたように:

FWIW、 bindService() は非同期です。ServiceConnection で onServiceConnected() が呼び出されるまで、バインドされた接続はありません。

あなたのbindService()呼び出しでは、ServiceConnectionオブジェクトを提供しています。そのオブジェクトはonServiceConnected()、サービスが使用可能になると呼び出されます。とりわけ、それはおそらくあなたが居住している場所ですmService。に電話をかけStartSocketServer()ますonServiceConnected()

于 2010-09-03T15:57:48.577 に答える