0

サービスを開始するように AlarmManager オブジェクトを設定しました。

AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); //context = getApplicationContext();
Intent alarmServiceIntent = new Intent(context, AlarmHandlingService.class);
alarmServiceIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
alarmServiceIntent.putExtra("alarmId", _id); //_id is a "long" value
PendingIntent pi = PendingIntent.getService(context, (int)_id, alarmServiceIntent, 0); 
am.set(AlarmManager.RTC_WAKEUP, time, pi); 

onStartCommand(..., ..., ...)は、AlarmHandlingService機能する必要があるときに機能する必要があります。問題はありません:

public int onStartCommand(Intent intent, int flags, int startId)
{
    long alarmId = intent.getLongExtra("alarmId", -1);
    Intent someActivityIntent = new Intent(this, SomeActivity.class);
    someActivityIntent.putExtra("alarmId", alarmId);
    someActivityIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(someActivityIntent);
    return START_NOT_STICKY;
}

しかし、その後、新しいアクティビティ (SomeActivity) を開いて を呼び出すstopService(...)と、サービスは停止しません。

stopService(new Intent(context, AlarmHandlingService.class)); //context = getApplicationContext();

これは、マニフェストでのサービス クラスの宣言です。
<service android:name="***myPackageName***.AlarmHandlingService"></service>

デバッグしようとしましたが、 を呼び出したときにクラスのregisterReceiver (BroadcastReceiver receiver, IntentFilter filter)関数が呼び出されることに気付きました。android.content.ContextWrapperstopService

4

2 に答える 2

0

新しいアクティビティでお試しください。

stopService(new Intent(this, AlarmHandlingService.class));
于 2013-07-02T12:24:01.640 に答える
0

あなたのコメントから、stopServiceが呼び出されているときに何もしていません。

stopService を呼び出すと、実際には関数 stopService() が呼び出されます (これはアプリケーションで実行されます)。

onDestroy メソッドを使用する必要があります。

public void onDestroy ()

API レベル 1 で追加

Service が使用されなくなり、削除されることを通知するために、システムによって呼び出されます。この時点で、サービスは保持しているすべてのリソース (スレッド、登録済みレシーバーなど) をクリーンアップする必要があります。戻ると、この Service オブジェクトへの呼び出しはなくなり、実質的に無効になります。(このメソッドを直接呼び出さないでください)。

もう1つの問題は、アラームマネージャーを停止するために何も呼び出していないことです。

のキャンセルメソッドを呼び出している必要がありますAlarmManager

于 2013-07-02T12:25:27.613 に答える