为啥进入动画在新线程中不起作用?

Posted

技术标签:

【中文标题】为啥进入动画在新线程中不起作用?【英文标题】:Why entering animation is not working in new thread?为什么进入动画在新线程中不起作用? 【发布时间】:2018-04-16 04:00:28 【问题描述】:

从新线程启动 Activity 时,Entry Transition 动画不起作用。

 new Thread(new Runnable() 
                @Override
                public void run() 
                    Intent listIntent = new Intent(HomeFragment.this.getActivity(),
                            ListActivity.class);
                    listIntent.putExtra(getString(R.string.type_id), data.get(i).getType_id());
                    listIntent.putExtra(getString(R.string.translation_title), data.get(i).getTranslate_type());
                    startActivity(listIntent);
                    getActivity().overridePendingTransition(R.anim.slide_up, R.anim.fade_in);
                
            ).start();

但过渡动画在 ui 线程中有效。为什么进入动画在新线程中不起作用?

【问题讨论】:

【参考方案1】:

你只需使用这个:

Handler h = new Handler();
h.postDelayed(new Runnable() 

    @Override
    public void run() 
         Intent listIntent = new Intent(HomeFragment.this.getActivity(),
                        ListActivity.class);
         listIntent.putExtra(getString(R.string.type_id), data.get(i).getType_id());
         listIntent.putExtra(getString(R.string.translation_title), data.get(i).getTranslate_type());
         startActivity(listIntent);
         getActivity().overridePendingTransition(R.anim.slide_up, R.anim.fade_in);
    
, 100);

编码愉快!!

【讨论】:

谢谢哥们。它正在工作 :) 你能告诉我为什么它的行为很奇怪吗? "new Thread" 在您的调用中被视为创建一个不是主线程的新线程(无法启动新活动)正如此答案中所修复的那样,使用处理程序将在线程中运行你称之为(可能是 UI 线程)【参考方案2】:

您对启动新活动的调用被视为 UI 部分,请仅在 UI 线程中执行,

由于启动新活动将占据您的整个屏幕,因此暂停旧动画可能是更好的解决方案,因为用户无论如何都看不到您的动画

【讨论】:

感谢您的回答。我会执行的。【参考方案3】:

为什么要创建一个单独的线程来创建一个活动?

Intent intent = new Intent( getContext(), ListActivity.class);
startActivity(intent);

【讨论】:

我的 UI 线程正在做动画。在 UI 线程中创建活动时,动画卡顿!这就是为什么我要找一个新线程。

以上是关于为啥进入动画在新线程中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的动画在 Firefox 中不起作用?

为啥我的链接颜色关键帧动画在 Chrome 中不起作用?

为啥我的动画在 Roblox Studio 中不起作用

为啥这个 CSS3 动画在 Safari 和 Chrome 中不起作用?

为啥这个 CSS3 动画在 MS Edge 或 IE11 中不起作用?

为啥带有 SVG 的 CSS 剪辑路径在 Safari 中不起作用?