小编NKR*_*NKR的帖子

Android:导航组件中操作ID和片段ID之间的区别

有个问题困扰了我很久

在导航组件中,当使用 .navigate(int resId) 时,传递动作 id 与片段 id 有何不同?

例子:

<fragment android:id="@+id/loginFragment"
          android:name="com.example.myapp.ui.main.LoginFragment"
          android:label="@string/login"
          tools:layout="@layout/fragment_login" >

    <action
        android:id="@+id/action_login_to_emailLoginFragment"
        app:destination="@id/emailLoginFragment"
        app:popEnterAnim="@anim/slide_in_right"
        app:popExitAnim="@anim/slide_out_right"
        app:popUpTo="@+id/emailLoginFragment"
        app:popUpToInclusive="true"/>

</fragment>

<fragment android:id="@+id/emailLoginFragment"
          android:name="com.example.myapp.ui.main.EmailLoginFragment"
          android:label="EmailLoginFragment"
          tools:layout="@layout/fragment_login_email" />
Run Code Online (Sandbox Code Playgroud)

在上面的场景中,如果

1) 使用 .navigate(R.id.action_login_to_emailLoginFragment);

2) 使用 .navigate(R.id.emailLoginFragment);

我还有一个查询,我知道 .navigate(int resId) 将替换片段,在这种情况下如何保留前一个片段中的视图状态?

android navigation-architecture

5
推荐指数
1
解决办法
778
查看次数

垃圾收集(本地参考)

我对GC如何在Java中工作感到困惑.

以下是令我困惑的代码段:

private Data data = new Data();

void main() {

    for (int i = 0; i < 100 ; i++) {
       MyThread thread = new MyThread(data);
       thread.start();
    }

    System.gc();

    // Long running process

} 

class MyThread extends Thread {
    private Data dataReference;

    MyThread(Data data) {
        dataReference = data;
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,如果在继续进一步继续之前调用gc(//长时间运行进程)

  • 本地线程会被垃圾收集吗?

  • 或GC将迎来他们(MyThread的本地引用)一样活着,因为它拥有的参考全球参考的数据

java android garbage-collection jvm

1
推荐指数
1
解决办法
83
查看次数