先说需求吧:应用当前在FirstFragment,然后回到桌面,然后回到应用,回到应用需要显示SecondFragment
然后说下实现:Activity启动模式是singleTask,这样再次启动会走onNewIntent ,然后再onNewIntent里处理intent,根据传过来的type来显示Fragment。
说下问题: 每次回来的时候会看到FirstFragment切换到SecondFragment的痕迹,就是会短暂的显示一下FirstFragment再切换到SecondFragment。
下面是实现代码:
public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    private FirstFragment mFirstFragment;
    private SecondFragment mSecondFragment;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mFirstFragment = new FirstFragment();
        mSecondFragment = new SecondFragment();
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart: ");
    }
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG, "onRestart: ");
    }
    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume: ");
    }
    public void toFirstFragment(View view){
        switchFragment(mFirstFragment);
    }
    public void toSecondFragment(View view){
        switchFragment(mSecondFragment);
    }
    private Fragment lastOneFragment = null;
    private void switchFragment(Fragment currentFragment) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        if(!currentFragment.isAdded()){
            transaction.add(R.id.layout_container,currentFragment);
        }
        if (lastOneFragment!=null){
            transaction.hide(lastOneFragment);
        }
        lastOneFragment=currentFragment;
        transaction.show(currentFragment);
        transaction.commit();
    }
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Log.d(TAG, "onNewIntent: ");
        processIntent(intent);
    }
    private void processIntent(Intent intent) {
        int type = intent.getIntExtra("type", 0);
        Log.d(TAG, "processIntent: type = "+type);
        switch (type){
            case 1:
                switchFragment(mFirstFragment);
                break;
            case 2:
                switchFragment(mSecondFragment);
                break;
        }
    }
}
下面是输出的log:
2019-01-01 09:50:37.044 11798-11798/com.example.fragmenttest D/MainActivity: onNewIntent: 
2019-01-01 09:50:37.044 11798-11798/com.example.fragmenttest D/MainActivity: processIntent: type = 2
2019-01-01 09:50:37.062 11798-11798/com.example.fragmenttest D/SecondFragment: onStart: 
2019-01-01 09:50:37.066 11798-11798/com.example.fragmenttest D/MainActivity: onResume: 
2019-01-01 09:50:37.068 11798-11798/com.example.fragmenttest D/FirstFragment: onResume: 
2019-01-01 09:50:37.069 11798-11798/com.example.fragmenttest D/SecondFragment: onResume: 
你这个:每次回来的时候--->指的是在其他Activity回到MainActivity吗?
从你的日志,走了onNewIntent,然后对页面进行了切换了。
如果你的日志是一次个动作的日志,你这里的确经历了页面的可见。你打个断点即可。
回桌面先全部hide?
下面是A8和A9的gif,可以明显看到A9起来有蓝色闪了一下
蓝色是FristFragment,红色是SecondFragment
A8
A9
既然你想要不看到FirstFragment,那么可以在回到桌面的时,就把Fragment 切换到SecondFragment,那么到时再次回到应用的时候,就是直接显示SecondFragment