アプリが強制停止されている場合でもサービスを再起動し、アプリを閉じた後もバックグラウンドでサービスを実行し続ける方法

Om3ga:

バックグラウンドでサービスを実行しようとしています。私のアプリは、ユーザーがチェックボックスをオンにするとサービスが開始し、オフにするとサービスが停止します。これは完全に問題なく機能しています。しかし問題は、タスクマネージャーからアプリを閉じたときに、サービスも停止してしまうことです。私が欲しいのは、サービスがタスクマネージャーから近くなった後でもサービスを実行し続けることです。次に、そのサービスを停止する唯一の方法は、ユーザー自身がボックスをアンチェックすることです。

どうすればこれを達成できますか?

これが私のコードです

私の主な活動

public class SampleServiceActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final CheckBox cb = (CheckBox) findViewById(R.id.checkBox1);

    cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {

            if(isChecked) {
                Toast.makeText(getBaseContext(), "Checked", Toast.LENGTH_LONG).show();
                startService(new Intent(getBaseContext(), MyService.class));
            } else {
                Toast.makeText(getBaseContext(), "Unchecked", Toast.LENGTH_LONG).show();
                stopService(new Intent(getBaseContext(), MyService.class));
            }
        }

    });
}
}

私のサービスクラス

public class MyService extends Service {
Notify n = new Notify();
@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

public int onStartCommand(Intent intent, int flags, int startId) {
    Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
    n.initNotification(getBaseContext(), true);
    return START_STICKY;
}

//method to stop service
public void onDestroy() {
    super.onDestroy();
    n.cancelNotification(getBaseContext());
    Toast.makeText(this, "Service Stopped", Toast.LENGTH_LONG).show();
}
}

更新

このサービスを作成して、gtalkサービスのように実行するにはどうすればよいですか?

アヒル:

どの「タスクマネージャー」を参照しているのかが異なるため、動作が異なるため、ユーザーが[設定]-> [アプリケーションの管理]-> [アプリを強制停止]に移動したときのアクションに基づいています。アンドロイドは彼を与えました。

サービスがプロセスの一部として実行されていると想定し、ユーザーがプロセスを強制停止した場合、ユーザーが手動で起動するまで、サービスを再び実行することはできません。これは、3.0以降のバージョンで特に有効です(ご使用のバージョンを確認してください) )。また、常にサービスを開始し続け、ユーザーを不快にさせているアプリがあると考えるのも当然のようです。そのため、ユーザーがアプリでヒット(:)強制停止)を注文した場合、サービスを再起動してユーザーのバグを継続させないください

たとえば、ウェイクロックを保持することで、プロセッサ時間に食い尽くすだけのアプリを作成でき、それらを殺せなかった場合を想像してみてください。これは恐ろしいことであり、大きなセキュリティ災害となります。

したがって、ユーザーがアクティビティの1つを起動するまで、サービスを再起動することはできません

また、強制停止ボタンAFAIKを無効にすることもできません。あなたは、あなたのアプリと(限られた範囲で)あなたがアクセスを許可されているリソースを除いて、あなたのデバイス上の何もあなたのものではないという見方をするべきです。

最後に、強制的に停止したい場合は、gtalkアプリでも意のままに曲がります。GtalkまたはPUSH Gmailなどのgtalkサービスを使用する他のアプリを使用している場合にのみ起動します(gtalkがファームウェアの一部ではない携帯電話の場合)。また、見とるアンドロイドC2DMをここに:

https://stackoverflow.com/a/11238779/1218762

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ