17

ユーザーがサービスを閉じたときにサービスを常に実行または再起動し続ける方法を教えてもらえますか? メモリをクリアすると Facebook サービスが再起動するのを見てきました。ForegroundServices を作成したくありません。

4

2 に答える 2

29

スティッキー サービスを作成する必要があります。詳しくはこちらをご覧ください。

これを行うには、onStartCommand で START_STICKY を返します。

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.i("LocalService", "Received start id " + startId + ": " + intent);
    // We want this service to continue running until it is explicitly
    // stopped, so return sticky.
    return START_STICKY;
}

application:persistentについてもお読みください。これは、「アプリケーションを常に実行し続ける必要があるかどうか」です。これはより厄介です - システムは、システム内の他のアプリに影響を与えるアプリを強制終了しないようにします。注意して使用する必要があります。

于 2012-08-18T09:41:31.190 に答える
8

これは、以前行ったアプリで使用したサービスからコピーしたものです。

UI を更新しないことが重要です。サービスにはユーザー インターフェイスがないためです。これはトーストにも当てはまります。

幸運を

public class nasserservice extends Service {
    private static long UPDATE_INTERVAL = 1*5*1000;  //default

    private static Timer timer = new Timer(); 
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate(){
        super.onCreate();
        _startService();

    }   

    private void _startService()
    {      
        timer.scheduleAtFixedRate(    

                new TimerTask() {

                    public void run() {

                        doServiceWork();

                    }
                }, 1000,UPDATE_INTERVAL);
        Log.i(getClass().getSimpleName(), "FileScannerService Timer started....");
    }

    private void doServiceWork()
    { 
        //do something wotever you want 
        //like reading file or getting data from network 
        try {
        }
        catch (Exception e) {
        }

    }

    private void _shutdownService()
    {
        if (timer != null) timer.cancel();
        Log.i(getClass().getSimpleName(), "Timer stopped...");
    }

    @Override 
    public void onDestroy() 
    {
        super.onDestroy();

        _shutdownService();

        // if (MAIN_ACTIVITY != null)  Log.d(getClass().getSimpleName(), "FileScannerService stopped");
    }

}
于 2012-08-18T07:12:53.550 に答える