0

broadcastReceiverがブートメッセージを受信し、alarmmanagerを設定します。

DELAY分ごとにサービスを開始します。

 Intent intent = new Intent();
 intent.setAction("org.jxdwinter.getMessageServcie");
 PendingIntent pendingintent = PendingIntent.getService(arg0, 0, intent, 0);
 am = (AlarmManager) arg0.getSystemService(Context.ALARM_SERVICE); 
 am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), DELAY, pendingintent);

新しいスレッドのromateサーバーからのサービスポーリングデータ:

public int onStartCommand(Intent intent, int flags, int startId)
{
    this.getMessage.start();
    return Service.START_NOT_STICKY;
}
private class GetMessage extends Thread
{
    public void run()
    {
       ... ....
    }       
}

そして、アプリが起動したとき、私は非常に最初にデータを取得することができ、エラーはありません。

その後、サービスはDELAY minsで再開され、エラーが発生します:スレッドはすでに開始されています。

なぜ起こったのですか?plsはこれで私を助けます。ありがとうございました!

4

2 に答える 2

1

スレッドを実行する必要があるたびに、スレッドの新しいインスタンスを作成することもできます。

public int onStartCommand(Intent intent, int flags, int startId)
{
    new GetMessage().start();
    return Service.START_NOT_STICKY;
}
于 2012-11-12T08:29:49.767 に答える
0

使用しているGetMesdsageクラスのインスタンスは、万が一静的ですか?はいの場合、これを行わないでください-新しいものを初期化します

于 2012-11-12T08:30:46.180 に答える