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

研究背景:

在消息推送时,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);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue中,可以使用路由组件来实现前端路由跳转中转页,以下是一个简单的示例: 1. 创建一个名为`Loading.vue`的中转页组件,如下所示: ```vue <template> <div> <p>Loading...</p> </div> </template> <script> export default { name: 'Loading' } </script> ``` 2. 在路由配置中,将中转页组件与目标组件进行关联,如下所示: ```js import Vue from 'vue' import Router from 'vue-router' import Home from '@/views/Home.vue' import Loading from '@/components/Loading.vue' Vue.use(Router) const router = new Router({ routes: [ { path: '/', name: 'Home', component: Home }, { path: '/about', name: 'About', component: () => import('@/views/About.vue'), beforeEnter: (to, from, next) => { // 在进入目标路由前展示中转页 router.app.$root.showLoading = true next() } } ] }) // 在全局中定义showLoading变量,用于控制是否展示Loading组件 Vue.mixin({ data() { return { showLoading: false } } }) router.beforeEach((to, from, next) => { // 在路由跳转前,将showLoading设置为false,确保Loading组件不会一直显示 router.app.$root.showLoading = false next() }) router.afterEach((to, from) => { // 在路由跳转后,将showLoading设置为false,确保Loading组件不会一直显示 router.app.$root.showLoading = false }) export default router ``` 在上述代码中,我们在路由配置中的`About`路由上使用了`beforeEnter`函数,当用户进入该路由,先展示`Loading`组件,等待目标组件加载完成后再进行跳转。同,在全局中定义了一个`showLoading`变量,用于控制是否展示`Loading`组件。 需要注意的是,在每次路由跳转前和跳转后,都要将`showLoading`变量设置为`false`,以确保`Loading`组件不会一直显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值