2

私は、常に実行している必要があり、タスクキラーなどでのみ閉じることができるアプリを開発しています。

私はマニフェストに持っています:

android:persistent="true"

ホームボタンを押しても閉じませんが、時々閉じていることがわかり、これが発生したくありません。

ユーザーが望むのは、カスタムランチャーからアプリを強制終了するか、タスクキラーを使用してアプリを閉じることができることです。

助言がありますか?前もって感謝します

PD: 戻るボタンを使用してアプリを終了するにはどうすればよいですか。アプリを閉じるのではなく、アプリまたはそのアクティビティの表示を停止しますが、アプリはバックグラウンドで実行し続ける必要があります。

サービスを作成しましたが、何かが正常に動作していません これをマニフェストに追加しました

<service android:name=".ONService"></service>

application タグの末尾の直前にあり、これは ONService.java です。

package com.omninotifier.main;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;

public class ONService extends Service{

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}


@Override
public void onCreate() {
    // TODO Auto-generated method stub
    //super.onCreate();
}



@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // TODO Auto-generated method stub
    //return super.onStartCommand(intent, flags, startId);

    return START_STICKY;
}

@Override
public void onDestroy() {
    // TODO Auto-generated method stub

    NotificationManager manager = (NotificationManager)     
getSystemService(Context.NOTIFICATION_SERVICE);
    Notification notification = new Notification(R.drawable.ic_stat_alert,   
getResources().getString(R.string.ServiceDestroyed), System.currentTimeMillis());
    notification.flags = Notification.FLAG_AUTO_CANCEL;
    manager.notify(150, notification);

    super.onDestroy();
}

 }

そして、私はこれを行うサービスを開始し、アプリが開始します:

これがアプリのメイン アクティビティです

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


   Intent serviceIntent = new Intent();
   serviceIntent.setAction(".ONService");
   startService(serviceIntent);

//............

}

これを機能させるには、サービス タグにアクションを含むインテント フィルターを追加する必要がありますか? それとも他の問題ですか?

問題は、サービスを開始できなかったことです。これは修正です:

マニフェストで

<service android:name=".ONService">
<intent-filter android:priority="100">
    <action android:name=".ONService"/>
</intent-filter>
</service>

サービスを呼び出すアクティビティで:

Intent serviceIntent = new Intent(".ONService");


startService(serviceIntent);
4

5 に答える 5

2

私は、常に実行している必要があり、タスクキラーなどでのみ閉じることができるアプリを開発しています。

それは厳密には不可能です。Android は、ずさんな開発者が「常に実行しなければならないアプリ」を作成しようとするのを防ぐために、プロセスを削除することができ、最終的には削除します。

アプリケーションがフォアグラウンド ユーザー エクスペリエンスの一部である場合 (音楽プレーヤーなど)、 を呼び出すサービスを使用できます。これにより、ステータス バーに が関連付けられてstartForeground()いる限り、Android がプロセスを削除する可能性が低くなります。Notificationあなたのアプリ。アプリのプロセスは最終的には終了しますが、時間がかかる傾向があります。

または、ロジックを実装する C デーモンを含む Android オペレーティング システムの独自のカスタム ビルドを作成し、カスタマイズした Android を含む ROM mod を配布することもできます。

于 2012-07-31T19:03:54.357 に答える
1

アプリを閉じた後もアプリを実行し続けるには、アプリ内にサービスを作成して、バックグラウンドで実行したいことを実行する必要があります。

Android アプリの開発に慣れていない場合は、次の Android サービスのチュートリアルをご覧になることをお勧めします: http://www.vogella.com/articles/AndroidServices/article.html。さらに、Android のドキュメントが非常に役立つことがわかりました。サービスのAPI ガイドとサービス クラスのAPI リファレンスの両方を読むことをお勧めします。

于 2012-07-31T18:47:29.483 に答える
1

サービスを書きます。アプリはサービスと通信します。アプリが終了しても、サービスは引き続き実行されます。

http://developer.android.com/reference/android/app/Service.html

于 2012-07-31T18:47:56.663 に答える
0

Service、AlarmManager、および BroadcastReceiver を組み合わせて使用​​します。AlarmManager はパルスを発行し、BCReceiver は必要に応じてサービスをキャッチして開始します。これにより、サービスが定期的に使用されることが Android で認識されるため、基本的にはサービスが際限なく存続します。技術的には、アプリのライフサイクルであるサービスは Android の制御下にありますが、サービスをスティッキーに開始すると、定期的に呼び出すことができます。AlarmManager は非常に信頼性があります。

于 2012-07-31T19:59:03.410 に答える
0

常に実行する必要がある場合は、 aServicestartForegroundを調べてください。サービスを終了させて​​再起動できる場合は、onStartCommandSTART_STICKYを調べてください。

于 2015-03-18T07:35:42.180 に答える