1

私はメディア再生アプリを書いています。正常に動作しますが、約30分間再生すると再生が停止し、私が知る限り、外出して実行しているときにのみ発生します。デバッガーに接続しているときに起こるとは思いませんが(確かにはわかりませんが)、バグが発生するまでに非常に時間がかかるため、デバッグするのは非常に面倒です。

MediaPlayerは独自の(バインドされた)サービスで実行されていますが、バグは、画面がしばらくオフになった後のAndroidの一時停止/アプリの停止に関連している可能性があると感じています(デバッグ中は発生しません)。ただし、これは単なる推測です。

私の質問は、正確な問題が何であるかではなく、この種の問題をどのようにデバッグするかです。アプリケーションにBugSenseをアタッチしましたが、例外はスローされません。実用的なデバッグ戦略のアイデアはありますか?

編集:サービスはここで見つけることができます:https ://github.com/bottiger/SoundWaves/blob/5820196924ce9bc731f50c5def991351ed9b3a3b/src/info/bottiger/podcast/service/PlayerService.java

私はそれをバインドするために次のコードを使用しています。

public ServiceConnection playerServiceConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName className, IBinder service) {
        mPlayerServiceBinder = ((PlayerService.PlayerBinder) service)
                .getService();
        // log.debug("onServiceConnected");
    }

    @Override
    public void onServiceDisconnected(ComponentName className) {
        mPlayerServiceBinder = null;
        // log.debug("onServiceDisconnected");
    }
};

およびonCreate()

       getActivity().bindService(bindIntent, playerServiceConnection,
            Context.BIND_AUTO_CREATE);
4

1 に答える 1

2

startForegroundとstopForegroundを呼び出さないでください。

開始されたサービスは、startForeground(int、Notification)APIを使用して、サービスをフォアグラウンド状態にすることができます。システムは、サービスをユーザーがアクティブに認識しているものと見なし、メモリが不足しているときに強制終了する候補ではないと見なします。(理論的には、現在のフォアグラウンドアプリケーションからの極端なメモリプレッシャーの下でサービスが強制終了される可能性がありますが、実際にはこれは問題ではありません。)

システムがさらにリソースを必要とする場合、Androidはサービスを強制終了します。このケースはデバッグが非常に困難です。これはOS固有の動作です。

再生を開始するときはサービスでstartForegroundを呼び出し、停止するときはstopForegroundを呼び出します。

サービスライフサイクルの詳細については、こちらをご覧ください:http: //developer.android.com/reference/android/app/Service.html

于 2013-02-15T09:32:54.943 に答える