0

ライフサイクルに関して、stopService(intent)を呼び出すと、サービスのonDestroy()がすぐに呼び出されますか?サービスが生成するこのスレッドを強制終了するためにonDestroy()を呼び出すのに問題があるため、質問しています。

前もって感謝します!

button.setOnClickListener(new OnClickListener(){
        public void onClick(View v){

            Log.d(Tag, "in button's onClick");


            Log.d(Tag, field.getText().toString());
            String busNo = field.getText().toString();
            field.setText("");
            field.setAdapter(clearAdapter);
            String url = makeURL(busNo);
            Log.d(Tag, "after makeURL(), url is now "+url);
            Intent intent = new Intent(JSoupTest9Activity.this, ServiceTest.class);
            Log.d(Tag, "intent created...");
            intent.putExtra("URL", url);
            Log.d(Tag, "intent's extra put");
            Log.d(Tag, "stopping intent service");
            stopService(intent);
            Log.d(Tag, "starting intent service");

            startService(intent);
            Log.d(Tag, "service started");

            //pendingIntent = PendingIntent.getService(JSoupTest8Activity.this, 0, intent,  0);
            //alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 30*1000, pendingIntent);

        }
    });

ご覧のとおり、stopService()を呼び出して、以前のサービス(クエリスレッド)を強制終了し、新しいサービス(新しいクエリスレッド)を開始しました。

4

1 に答える 1

3

静的にstopServiceを呼び出すだけでは、すぐには呼び出されません。アクティビティのライフサイクル図で示されているように、VMにリソースが必要な場合は破棄されます

疑問がある場合は、ログツールを使用して、LogCatで出力を確認します。次のようにOnDestroyメソッドをオーバーライドする場合:

protected void onDestroy() {
Log.d("event","onDestroy was Called!");
super.onDestroy();
}

呼び出されたときに自分自身を確認できます。

また、バックグラウンドでアクティビティの1つを破棄する場合は、アクティビティマネージャーを使用できます。

ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
activityManager.killBackgroundProcesses("<packagename>");

アプリ内にない場合は、もちろんマニフェストに権限を設定する必要があります。私の限られた経験では、プロセスを破壊する必要がある時間を見つけられませんでした。しかし、私は、例えば、そうしないように私に言っている多くの文書を見つけました

さらに調べてみると、この質問はすでにカバーされていると思います

于 2012-08-22T08:47:18.787 に答える