2016-09-01 12 views
0

現在、私は本当に奇妙な問題を抱えています。何が原因か分かりません。私はそれを離れてスワイプしてアプリケーションを閉じるたびに、それを再開するたびに、アプリケーションはlogcatにその出力を複製しているように見える、または言い換えれば、複数回実行されているようだ。Androidアプリは、スワイプしてからもう一度やり直すと重複しているようです。

これはAndroidスタジオに接続しているときには発生しませんが、ケーブル接続がなくても間違いなく実行されます。私の主な活動で

私はこのように私のサービスを開始:私は停止し、私のサービスを開始する方法で、いくつかの変更を行いました

unbindService(bluetoothServiceConnection); 
Intent intent = new Intent(MainActivity.this, BluetoothService.class); 
stopService(intent); 

EDIT

Intent intent = new Intent(this, BluetoothService.class); 
startService(intent); 
bindService(intent, bluetoothServiceConnection, Context.BIND_AUTO_CREATE); 

は、サービスを停止しますこれはAndroid 5.1.1では私の問題を解決したようだが、Android 4.4.4では悲しいことではない。

ロギングプロセスが問題になる可能性があると思っていましたが、自分のアクティビティのonDestroy()メソッドでそのプロセスを破棄しても問題は解決されませんでした。

logger.destroy(); 
+0

なぜ別のプロセスを開始しますか? – tynn

+0

私はある時点でガイドに従った。私はちょうどファイルにlogcatを出力したかったので、これがうまくいきました。私はこれをしてはいけませんか? – newbiesovs

+0

あなたがしていることが分かっている場合にのみ、それを行うべきです。なぜこれも必要なのですか? – tynn

答えて

0

あなたのコードは、任意のログ情報が含まれていない、また、あなたはそれでスタックトレースを提供しなかった:それを停止

logger = Runtime.getRuntime().exec(new String[]{"logcat", "-v", "time", "-f", logcatFile.getAbsolutePath(), " *:E"}); 

ロギング処理を開始します。あなたのスプラッシュ画面が問題ではないようですが、あなたはあなたが実行しているルーパ糸(メインスレッド)にハンドラに遅れたポストで新しいスレッドを置き換える必要があります。

new Handler().postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     Intent i = new Intent(getApplicationContext(), MainActivity.class); 
     startActivity(i); 
     finish(); 
    } 
}, 1500); 

代わりのgetApplicationContext()直接SplashActivity.thisを使用することもできます。

MainActivityには、サービスをアンバインドしてサービスをにする必要があります。あなたが必要とするものによっては、それをやめることもできます。詳しくは、Bound Servicesを参照してください。 Servicedocumentation状態

にサービスを終了することについては

を開始することができ、両方とはそれにを接続バインドされています。そのような場合、システムはが起動されているか、Context.BIND_AUTO_CREATEフラグで1つ以上の接続がある限り、サービスを実行し続けることをにします。 これらの状況のいずれもが保持されていない場合、サービスのonDestroy()メソッドが呼び出され、サービスが有効に終了します。

これは、サービスがまったく起動していない場合に動作する理由です。 onDestroy()でサービスを停止しようとすると、サービスが停止している場合にのみ呼び出されます。あなたのコードは、サービスを全く開始する必要がないように見えます。しかし、それを正しく行うには、活動のサービスを停止するか、 onUnbind()、または活動やサービスの他の有用なライフサイクルイベントを利用してください。

+0

ご意見ありがとうございます、本当にありがとうございます。 私はアプリケーション全体を通してlogcatに書いていますが、私は何を選ぶべきかわからない、私は根本的に何かをやっていなければならないと思っただけですが、コードのどこにいじっているのか分かりません。 私は私のサービスをアンバインドしますが、私もそれをやめようとしますが、役に立たない。 – newbiesovs

+0

おそらくそれを開始しないでください。さらにスレッドを生成する場合は、これらのスレッドも終了されていることを確認してください。 – tynn

+0

私のサービスをまったく開始しないと、もはや問題はないようです。うーん...明日もう一度見せてあげるよ。ありがとう、結構です。私は私の人生のためにこれを自分自身で理解することはできません。 – newbiesovs

0

サービスを開始する場合は、AndroidManifest.xmlでサービスをどのように定義するかによって異なります。アンドロイド:process = ":yourProcess"がある場合、プロセス名が ":"で始まる場合は、おそらくあなたのログ出力は何回も出力されます。

関連する問題