アクティビティをランドスケープ モードに変更すると、予期しないサービス リーク エラーが発生します。アプリは正常に動作していますが、エラーは logcat にのみ表示されます。
logcat エラーは次のとおりです。
E/ActivityThread(16640): アクティビティ com.amazon.hsyal.ui.VoltageSODLoggerActivity が、元々ここにバインドされていた ServiceConnection com.amazon.hsyal.ui.VoltageSODLoggerActivity$1@41461908 をリークしました
E/ActivityThread(16640): android.app.ServiceConnectionLeaked: アクティビティ com.amazon.hsyal.ui.VoltageSODLoggerActivity が ServiceConnection com.amazon.hsyal.ui.VoltageSODLoggerActivity$1@41461908 をリークしました。
E/ActivityThread(16640): android.app.LoadedApk$ServiceDispatcher.(LoadedApk.java:999) で
E/ActivityThread(16640): android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:893) で
E/ActivityThread(16640): android.app.ContextImpl.bindService(ContextImpl.java:1139) で
E/ActivityThread(16640): android.content.ContextWrapper.bindService(ContextWrapper.java:386) で
E/ActivityThread(16640): com.amazon.hsyal.ui.VoltageSODLoggerActivity$2.onClick(VoltageSODLoggerActivity.java:96) で
E/ActivityThread(16640): android.view.View.performClick(View.java:3538) で
E/ActivityThread(16640): android.view.View$PerformClick.run(View.java:14132) で
E/ActivityThread(16640): android.os.Handler.handleCallback(Handler.java:605) で
E/ActivityThread(16640): android.os.Handler.dispatchMessage(Handler.java:92) で
E/ActivityThread(16640): android.os.Looper.loop(Looper.java:137) で
E/ActivityThread(16640): android.app.ActivityThread.main(ActivityThread.java:4492) で
E/ActivityThread(16640): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) で
E/ActivityThread(16640): java.lang.reflect.Method.invoke(Method.java:511) で
E/ActivityThread(16640): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) で
E/ActivityThread (16640): com.android.internal.os.ZygoteInit.main (ZygoteInit.java:551) で
E/ActivityThread(16640): dalvik.system.NativeStart.main(ネイティブ メソッド) で
対応する onCreate コードは次のとおりです。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
PowerManager mgr= (PowerManager) this.getSystemService(Context.POWER_SERVICE);
wk = mgr.newWakeLock(PowerManager.FULL_WAKE_LOCK, "MyWakeLock");
wk.acquire();
intent = new Intent(getBaseContext(), LoggerService.class);
Button start_stop_button = (Button) findViewById(R.id.start_stop_button);
start_stop_button.setOnClickListener(startStopButtonListener);
if(getServiceInfo(this)){
start_stop_button.setText("Stop Service");
}else
{ start_stop_button.setText("Start Service");
}
}
サービス接続のインスタンスを作成している場所に問題があるに違いないと思います。現在、私はonCreateでそれを行っていますが、他の場所でもこれを行う必要がありますか?