当我将它滑开并再次启动时,Android应用程序似乎是重复的

时间:2016-09-01 20:23:27

标签: android android-activity android-service

我目前有一个非常奇怪的问题,我不知道是什么原因造成的。每次我通过轻扫它关闭应用程序,然后再次启动它,应用程序似乎将其输出复制到logcat,或者换句话说,它似乎运行多次。

当我连接到Android Studio时,这不会发生,但没有电缆连接,它会毫无疑问地完成。

在我的主要活动中,我开始这样的服务:

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

停止服务:

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

编辑我对停止和启动服务的方式进行了一些更改,这似乎解决了我在Android 5.1.1上的问题,但不是在Android 4.4.4上,遗憾的是。 / p>

我在想,也许我的日志记录过程可能是问题所在,但是在我的活动的onDestroy()中破坏了这个过程 - 方法也没有解决问题。

开始记录过程:

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

停止它:

logger.destroy();

2 个答案:

答案 0 :(得分:0)

您的代码不包含任何日志记录信息,也没有提供堆栈跟踪。你的启动画面似乎不是问题所在,但是你应该用一个延迟的帖子替换新线程到你正在运行的looper线程(主线程)的处理程序:

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

使Service终止documentation

  

服务既可以启动,也可以绑定。在这种情况下,系统将保持服务正常运行,只要它已启动或与Context.BIND_AUTO_CREATE标志有一个或多个连接。一旦 这些情况不成立,就会调用服务的onDestroy()方法,并且服务会被有效终止。

这就是为什么它在服务根本没有启动时有效。您尝试在onDestroy()中停止服务,只有在服务停止时才会调用该服务。您的代码看起来似乎根本不需要启动服务。但要正确地做到这一点,只需停止服务onDestroy()或利用 onUnbind()或活动或服务的任何其他有用的生命周期事件。

答案 1 :(得分:0)

如果您启动服务,取决于您如何在AndroidManifest.xml中定义服务,如果您有android:process =":yourProcess",如果进程名称以"开头:& #34;它会创建一个新进程,可能是你的日志输出多次。