解决overridePendingTransition失效的问题

本文分析了overridePendingTransition在Android应用中可能失效的原因,并提供了相应的解决方案,包括位置不正确、动画设置不当及Activity继承问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,导致overridePendingTransition失效的原因有很多,比如位置不正确,动画写的不对,等等,接下来就一一分析和解决overridePendingTransition失效的问题。

1.位置不正确,导致没有效果

 解决办法:overridePendingTransition必须放在startActivity和finish之间(finish可以不写)

2.动画写的不正确

解决办法:自定义的anim动画,进入和退出的时间必须相等,否则有可能导致没有效果

3.Activity继承了TabActivity

解决办法:在继承了TabActivity的类中,重写onPause方法,添加overridePendingTransition方法


package com.boncfc.mgrapp.fhVideo.teller; import android.app.Activity; import android.app.Notification; import android.app.ProgressDialog; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.RelativeLayout; import androidx.appcompat.app.AppCompatActivity; import com.boncfc.mgrapp.R; import com.fhuvideo.FHLiveMacro; import com.fhuvideo.FHLiveSessionParams; import com.fhuvideo.FHParams; import com.fhuvideo.adviser.FHTellerParams; import com.fhuvideo.adviser.tool.FHAPlayer; import com.fhuvideo.bank.FHPermission; import com.fhuvideo.bean.FHLog; import com.fhvideo.bankui.FHLivelisenter; import com.fhvideo.bankui.FHVideoManager; import com.fhvideo.bankui.bean.FHUIEvent; import com.fhvideo.bankui.call.FHCallActivity; import com.fhvideo.bankui.live.FHLiveActivity; import com.fhvideo.bankui.util.ToastUtil; import com.fhvideo.fhcommon.FHBusiCallBack; public class MainFhActivity extends AppCompatActivity { private static final String TAG = "MainFhActivity"; private Activity activity; private boolean isMetting = false; private ProgressDialog pd; private RelativeLayout outViewGroup; private WebView outWebView; private Handler mHandler = new Handler(); // 状态跟踪变量(新增) public static boolean isLiveActive = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 修改点1:设置透明背景避免白屏 getWindow().setBackgroundDrawable(null); setContentView(new View(this)); getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); activity = this; FHLiveSessionParams.setImChannelType(FHTellerParams.TX); setNoti(); initPD(); FHPermission.getInstance().checkPermission(activity); login(); } private void setNoti() { NotifyObject notifyObject = new NotifyObject(); notifyObject.content = "投屏内容"; notifyObject.title = "投屏标题"; notifyObject.subText = ""; notifyObject.param = ""; Notification notification = NotificationUtil.createScreenNotification(getApplicationContext(), notifyObject); //设置投屏通知 FHVideoManager.getInstance().setScreenNotification(notification); NotifyObject LivennotifyObject = new NotifyObject(); LivennotifyObject.content = "会话内容"; LivennotifyObject.title = "会话标题"; LivennotifyObject.subText = ""; LivennotifyObject.param = ""; Notification Livenotification = NotificationUtil.createScreenNotification(getApplicationContext(), LivennotifyObject); FHVideoManager.getInstance().setLiveForegroundNotification(Livenotification); } private void initPD() { pd = new ProgressDialog(activity); pd.setMessage("加载中..."); pd.setCanceledOnTouchOutside(false); } private void showPd() { if (!pd.isShowing()) { pd.show(); } } private void cancelPd() { if (pd.isShowing()) pd.cancel(); } private void login() { if (!FHTellerParams.isConnected()) { ToastUtil.getInatance(activity).show(getString(R.string.fh_not_net)); return; } String uid = getIntent().getStringExtra("tellerUid"); String pwd = getIntent().getStringExtra("password"); String dept = "0_2024"; String authNumber = getIntent().getStringExtra("authNumber"); if (TextUtils.isEmpty(uid) || TextUtils.isEmpty(pwd)) { ToastUtil.getInatance(activity).show("请输入视频柜员工号和密码!"); return; } showPd(); FHVideoManager.getInstance().loginAutoCreate(uid, pwd, dept, authNumber, new FHBusiCallBack() { @Override public void onSuccess(String s) { Log.i(TAG, "登录成功"); cancelPd(); startLiveActivity(); } @Override public void onError(String s) { Log.e(TAG, "登录失败: " + s); cancelPd(); if (!TextUtils.isEmpty(s) && (s.contains("40100") || s.contains("40024"))) { FHVideoManager.getInstance().forceFinishLastSession(FHParams.getUid(), null); } ToastUtil.getInatance(activity).show(s); finish(); } }); } private void startLiveActivity() { if (FHCallActivity.isStart) return; // 修改点3:明确状态标记 isLiveActive = true; isMetting = true; Log.d(TAG, "启动视频页面"); FHLiveActivity.setLiveLisenter(new FHLivelisenter() { @Override public void onVideoEvent(String type, String msg) { switch (type) { case FHTellerParams.FH_ON_START: configOutViewGroup(); Log.d(TAG, "会话开始"); break; case FHTellerParams.FH_VIDEO_END: case FHTellerParams.FH_ON_QUIT: finishCallMeeting(msg); break; case FHTellerParams.FH_ON_LEAVE: minimizeAppSafely(); break; case FHUIEvent.ONCLICK_FLOAT: handleFloatClick(); break; } } }); Intent intent = new Intent(activity, FHLiveActivity.class); startActivity(intent); // 修改点4:禁用跳转动画 overridePendingTransition(0, 0); } // 修改点5:新增安全最小化方法 private void minimizeAppSafely() { Log.d(TAG, "执行安全最小化"); moveTaskToBack(true); mHandler.postDelayed(() -> isLiveActive = false, 1000); } // 修改点6:优化小窗点击处理 private void handleFloatClick() { Log.d(TAG, "处理小窗点击"); mHandler.postDelayed(() -> { if (isMetting) { Intent intent = new Intent(activity, FHLiveActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intent); overridePendingTransition(0, 0); } }, 200); } // 保留原有方法(未修改) private void configOutViewGroup() { if (outViewGroup == null) { outViewGroup = new RelativeLayout(getApplicationContext()); outViewGroup.setLayoutParams(new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT )); } if (outWebView == null) { outWebView = new WebView(outViewGroup.getContext()); WebSettings webSettings = outWebView.getSettings(); webSettings.setJavaScriptEnabled(true); outWebView.setWebViewClient(new WebViewClient()); outWebView.loadUrl(""); // 配置业务URL } outViewGroup.removeAllViews(); outViewGroup.addView(outWebView); FHVideoManager.getInstance().configOutViewGroup(outViewGroup); } // 保留原有方法(未修改) private void destroyOutViewGroup() { if (outWebView != null) { outWebView.stopLoading(); outWebView.removeAllViews(); outWebView.destroy(); outWebView = null; } if (outViewGroup != null) { outViewGroup.removeAllViews(); } } private void finishCallMeeting(String msg) { Log.d(TAG, "结束会话: " + msg); isMetting = false; isLiveActive = false; destroyOutViewGroup(); } @Override protected void onResume() { super.onResume(); Log.d(TAG, "onResume"); mHandler.removeCallbacksAndMessages(null); } @Override protected void onRestart() { super.onRestart(); Log.d(TAG, "onRestart isMetting=" + isMetting); // 修改点7:优化返回处理 mHandler.postDelayed(() -> { if (isMetting && !isLiveActive) { Log.d(TAG, "恢复视频页面"); Intent intent = new Intent(activity, FHLiveActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intent); overridePendingTransition(0, 0); } }, 300); } @Override protected void onDestroy() { super.onDestroy(); Log.d(TAG, "onDestroy"); // 修改点8:确保资源释放 mHandler.removeCallbacksAndMessages(null); FHAPlayer.getInstance().stopPlayer(); destroyOutViewGroup(); } }这个写的java中,这是一个视频功能调用sdk,启动视频各种功能,但是现在首次点击最小化,会有一个白屏/黑屏,再点返回才能到app(混合开发的vue页面),后续的最小化都没有问题,根据上面的代码,分析什么原因导致的,并给出解决的办法,修改什么地方才能解决
最新发布
08-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值