1

2 つのボタンで開始および停止するバックグラウンド サービスを作成する必要があります。私のサービスは 5 分ごとに循環し、オンライン データベースからデータを取得します。IntentService クラスがループに使用されていないことをどこかで読みました。START_STICKY が返されるように、onStartCommand をオーバーライドします。このクラスでそれを行うと、サービスが開始されません。これどうやってするの?

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void start(View view){
        startService(new Intent(this, ForegroundService.class));
    }

    public void stop(View view){
        stopService(new Intent(this, ForegroundService.class));
    }
}




public class ForegroundService extends IntentService{

    private boolean stato;


    public ForegroundService(){
        super("ForegroundService");
    }

    @Override
    public void onCreate(){
        super.onCreate();
        Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onHandleIntent(Intent i){
        stato = true;
        int n=0;
        while(stato)
        {
            Log.i("PROVA SERVICE", "Evento n."+n++);
            try {
                Thread.sleep(1000);
            }
            catch (InterruptedException e)
            { }
        }
    }

    @Override
    public void onDestroy() {
        stato = false;
        Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show();
        super.onDestroy();
    }

}
4

1 に答える 1

0

ユーザーに積極的に価値を提供している場合にのみ、サービスを実行します。じっと座って時を刻むのを見ているだけでは、積極的にユーザーに価値を提供していません。

また、あなたが望むもの (「5 分ごとにサイクルし、オンライン データベースからデータを取得します」) は、ユーザーが望んでいるものではない可能性があり、確かに Google が望んでいるものではないことを理解してください。あまりにも多くの開発者がこのようなことを行っており、その結果、バッテリー寿命が低下しています。

一般的に言えば、あなたの最善の解決策 (あなたが述べた目的を考えると) は、おそらくあなたが 21 歳未満の場合にJobSchedulerフォールバックすることです. どちらの方法でも、定期的な作業をスケジュールすることができます. これらの作業の間にプロセスを実行する必要はありません。またはで作業をトリガーする頻度を教え、 またはで作業を行います。AlarmManagerminSdkVersionJobSchedulerAlarmManagerJobServiceIntentService

Android 6.0 以降では、ユーザーが設定アプリを介して Android にアプリをそのままにしておくように指示しない限り、アプリは最終的にDoze モードまたはアプリ スタンバイ モードになり、5 分ごとに制御できなくなることに注意してください。

于 2016-06-01T17:23:38.750 に答える