-1

Android プロジェクトの開発中に、Timber ログ ライブラリの使用が推奨されていることに遭遇しました。しかし、それを使用するように切り替えたとき、配置したアクティビティが Timber.plant(new Timber.DebugTree());ライフサイクルを再開すると (2 回目の呼び出しonCreate(savedInstanceState))、Timber によって生成されたすべてのログが LogCat パネルで 2 回生成されることがわかりました。

この簡単なコードは、問題を示しています。

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
    }
}

アプリを実行して画面を回転すると (アクティビティが破棄されて再作成されます)、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 パネルから多くのデバッグを行っており、アプリをデバッグするために 2 倍の情報を確認するのは非常に面倒です。

4

2 に答える 2