研究关于安卓中转跳转时黑屏的现象

研究背景:

在消息推送时,notification调整到一个MessageActivity,然后中转到文章详情页,然后再返回MessageActivty时候,在

onActivityResult方法中,返回到主页当中。

问题就在于返回到MessageActivity的中国,黑屏一闪而过。


研究结论:在onCreate中直接中转会导致MessageActivty本身的显示没有得到体现,而是在返回到MessageActivty的时候才展示。

而从没展示到展示出现了短暂的黑屏现象


解决方法1:    mHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                ActivityUtils.startActivityForResult(MainActivity.this, MainActivity2Activity.class, null, 1);
            }
        }, 0);

通过handler发送一个线程到队列,从而避免了MessageActivty的自身的展示的阻塞现象

缺点:在onCreate跳转的时候,用户会看到短暂的MessageActivty画面不过可以设置背景


解决办法2:不使用handler,而是直接跳转,但是不要再返回到MessageActivty中,

实际项目中,我的MessageActivity判断是否启动了应用

如果已经启动,直接跳到详情页面,并且销毁MessageActity,不再回来

如果没有启动,直接跳转到欢迎界面,由欢迎界面以此跳转到主页和详情页

这样由详情页推测的时候正好返回到主页当中


方法2避免了再次返回到中转activity当中


方法1案例代码:import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;

import com.icson.common.util.ActivityUtils;


public class MainActivity extends Activity {
    private Handler mHandler = new Handler(Looper.getMainLooper());
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                ActivityUtils.startActivityForResult(MainActivity.this, MainActivity2Activity.class, null, 1);
            }
        }, 0);

    }

//研究黑屏

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
      /*  ActivityUtils.startActivity(MainActivity.this, SplashActivity_.class);
        finish();*/
    }

}



public class MainActivity2Activity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_activity2);
    }

你可能感兴趣的:(Andriod)