在我的 Android 项目开发过程中,我遇到了鼓励使用 Timber 日志库的情况;但是当我切换到使用它时,我发现一旦我放置的活动 Timber.plant(new Timber.DebugTree());
重新启动其生命周期(第二次调用onCreate(savedInstanceState)
),Timber 生成的所有日志都会在 LogCat 面板中生成两次。
这个简单的代码说明了这个问题:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "StateChange";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Timber.plant(new Timber.DebugTree()); // plant a debug tree
setContentView(ActivityMainBinding.inflate(getLayoutInflater()).getRoot());
Timber.tag(TAG).i("onCreate"); // using timber log
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy"); // using android log
}
}
现在,当我运行应用程序并旋转屏幕(这将导致 Activity 销毁并再次重新创建)时,LogCat 的内容如下:
... I/StateChange: onCreate <-- everything is normal in the first creation
... I/StateChange: onDestroy
... I/StateChange: onCreate <-- when lifecycle restarts (rotate screen)
... I/StateChange: onCreate <-- those use Timber will get logged twice
... I/StateChange: onDestroy <-- but those use standard log remain normal
... I/StateChange: onCreate <-- rotate again
... I/StateChange: onCreate <-- same problem, but only twice
所以无论如何这仍然是我第一次使用 Timber,我不知道我们是否应该在任何地方放置任何代码来处理这种情况。虽然这看起来足够无害,但我目前正在做的项目涉及从 LogCat 面板进行大量调试,并且查看两倍的信息来调试应用程序确实很麻烦。