今天在技术群里有个overridePendingTransition设置无效的问题,相信大家都不陌生,这个方法是Activity中用来设置转场动画的。当时我看到他的截图中有个.start();我断定应该是子线程的问题,所以动手写了个测试,结果还真是。
正常启动方式
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(A_Activity.this, B_Activity.class));
overridePendingTransition(R.anim.my_splash_in, R.anim.my_splash_out);
finish();
Log.i(TAG, "run:= "+Thread.currentThread().getName());
}
});
异常的启动方式
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Runnable runnable = new Runnable() {
@Override
public void run() {
startActivity(new Intent(A_Activity.this, B_Activity.class));
overridePendingTransition(R.anim.my_splash_in, R.anim.my_splash_out);
finish();
Log.i(TAG, "run:= "+Thread.currentThread().getName());
}
};
//开启子线程
new Thread(runnable).start();
}
});
注意:子线程中动画并非是完全不管用,有时管用有时不管用
解决方案
把跳转的代码放在runOnUiThread()中执行。
总结
把自己遇到的问题以及解决方法分享出来,让千万同行少走弯路。不要让bug浪费我们的生命。