简体   繁体   English

android.app.DialogFragment.onStart上的android.os.TransactionTooLargeException

[英]android.os.TransactionTooLargeException at android.app.DialogFragment.onStart

my app often occur this problem: 我的应用经常出现此问题:

android.os.TransactionTooLargeException
at android.os.BinderProxy.transact(Native Method)
at android.view.IWindowSession$Stub$Proxy.addToDisplay(IWindowSession.java:683)
at android.view.ViewRootImpl.setView(ViewRootImpl.java:502)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:263)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:286)
at android.app.DialogFragment.onStart(DialogFragment.java:490)
at com.guangzhou.haochuan.tvproject.view.fragment.VideoEndDialog.onStart(VideoEndDialog.java:93)
at android.app.Fragment.performStart(Fragment.java:1724)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:918)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
at android.app.BackStackRecord.run(BackStackRecord.java:684)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:816)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:632)
at dalvik.system.NativeStart.main(Native Method)

I have checked some ducoment which said the transact data can not be too large (>1MB),but I do not know how the large data from; 我检查了一些ducoment,表示事务数据不能太大(> 1MB),但是我不知道大数据来自何处。 I just transact to Integer Param to DialogFragment when create it: 创建时,我只是将Integer Param转换为DialogFragment:

public static VideoEndDialog getInstance(int currentPos,int maxPos){
    VideoEndDialog videoEndDialog = new VideoEndDialog();
    Bundle bundle = new Bundle();
    bundle.putInt(PARAM1,currentPos);
    bundle.putInt(PARAM2,maxPos);
    videoEndDialog.setArguments(bundle);
    return videoEndDialog;
}

i think it is not too large,who knows other reason? 我认为它不是太大,谁知道其他原因? Thanks! 谢谢!

My DialogFragment whole code: 我的DialogFragment整个代码:

public class VideoEndDialog extends DialogFragment{

private static String PARAM1 = "currentPos";
private static String PARAM2 = "maxPos";

private int currentPos = 0;
private int maxPos = 0;

private OnClickListener mListener;

private long  mLastClickTime = 0;

FrameLayout lastEpisode;
FrameLayout nextEpisode;
FrameLayout continueWatch;
FrameLayout exit;
TextView lastEpisodeText;
TextView nextEpisodeText;

public static VideoEndDialog getInstance(int currentPos,int maxPos){
    VideoEndDialog videoEndDialog = new VideoEndDialog();
    Bundle bundle = new Bundle();
    bundle.putInt(PARAM1,currentPos);
    bundle.putInt(PARAM2,maxPos);
    videoEndDialog.setArguments(bundle);
    return videoEndDialog;
}

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    this.setCancelable(false);
    currentPos = getArguments().getInt(PARAM1);
    maxPos = getArguments().getInt(PARAM2);
    //Toast.makeText(getActivity(),"currentPos:" + currentPos + "; maxPos:" + maxPos,Toast.LENGTH_LONG).show();
}

@Override
public void onAttach(Activity activity){
    super.onAttach(activity);
    if(activity instanceof OnClickListener){
        mListener = (OnClickListener)activity;
    }else{
        throw new RuntimeException(activity.toString()
                + " must implement VideoEndDialog.OnClickListener");
    }
}

@Override
public void onStart(){
    super.onStart();
    mLastClickTime = getCurrentTime();
    //Toast.makeText(getActivity(),"mLastClickTime:" + mLastClickTime,Toast.LENGTH_LONG ).show();
}

private int getCurrentTime(){
    int currentTime = 0;
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HHmmss");
    currentTime = Integer.parseInt(simpleDateFormat.format(new Date()));
    return currentTime;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState)
{
    Dialog dialog = getDialog();
    dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
        @Override
        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
            switch (keyCode){
                case KeyEvent.KEYCODE_BACK:
                    if (getCurrentTime() - mLastClickTime < 2) {
                        return false;
                    }else{
                        VideoEndDialog.this.dismiss();
                        return true;
                    }
            }
            return false;
        }
    });

    View view = inflater.inflate(R.layout.video_end_dialog, container);

    lastEpisode = (FrameLayout)view.findViewById(R.id.last_episode);
    nextEpisode = (FrameLayout)view.findViewById(R.id.next_episode);
    continueWatch = (FrameLayout)view.findViewById(R.id.continue_watch);
    exit = (FrameLayout)view.findViewById(R.id.exit);
    lastEpisodeText = (TextView)view.findViewById(R.id.last_episode_text);
    nextEpisodeText = (TextView)view.findViewById(R.id.next_episode_text);


    setViewData();

    continueWatch.requestFocus();

    return view;
}

@Override
public void show(FragmentManager manager, String tag) {
    try {
        //在每个add事务前增加一个remove事务,防止连续的add
        manager.beginTransaction().remove(this).commitAllowingStateLoss();
        super.show(manager, tag);
    } catch (Exception e) {
        //同一实例使用不同的tag会异常,这里捕获一下
        e.printStackTrace();
    }
}


@Override
public void onDismiss(DialogInterface dialog) {
    super.onDismiss(dialog);
    mLastClickTime = 0;
    mListener.onDismiss();
}

private void setViewData(){
    //是否有上一集
    if(currentPos <= 0){
        //没有上一集
        lastEpisodeText.setTextColor(getResources().getColor(R.color.un_focus));
    }

    //是否有下一集
    if(currentPos >= maxPos - 1){
        //没有有下一集
        nextEpisodeText.setTextColor(getResources().getColor(R.color.un_focus));
    }


    //设置点击
    lastEpisode.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(currentPos <= 0){
                Toast.makeText(getActivity(),"亲,没有上一集",Toast.LENGTH_SHORT).show();
            }else{
                 -- currentPos ;
                mListener.onPlay(currentPos);
                //Toast.makeText(getActivity(),"currentPos:" + currentPos + "; maxPos:" + maxPos,Toast.LENGTH_LONG).show();
                VideoEndDialog.this.dismiss();
            }
        }
    });

    nextEpisode.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(currentPos >= maxPos -1){
                Toast.makeText(getActivity(),"亲,没有下一集",Toast.LENGTH_SHORT).show();
            }else{
                ++currentPos;
                mListener.onPlay(currentPos);
                //Toast.makeText(getActivity(),"currentPos:" + currentPos + "; maxPos:" + maxPos,Toast.LENGTH_LONG).show();
                VideoEndDialog.this.dismiss();
            }
        }
    });

    continueWatch.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mListener.onPlayCurrent();
            VideoEndDialog.this.dismiss();
        }
    });

    exit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mListener.onExit();
            VideoEndDialog.this.dismiss();
        }
    });

}

public interface OnClickListener{
    public void onPlay(int playPos);
    public void onPlayCurrent();
    public void onExit();
    public void onDismiss();
}

} }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 android.os.TransactionTooLargeException检索已安装的应用程序 - android.os.TransactionTooLargeException retrieving installed applications 执行queryIntentActivities时android.os.TransactionTooLargeException - android.os.TransactionTooLargeException when executing queryIntentActivities android.os.TransactionTooLargeException:数据包大小NOUGAT错误 - android.os.TransactionTooLargeException: data parcel size NOUGAT ERROR 从 Fragment 移动到 Activity 导致 android.os.TransactionTooLargeException - Move from Fragment to Activity Causes android.os.TransactionTooLargeException 由于java.lang.RuntimeException而在图库中崩溃:android.os.TransactionTooLargeException:数据包大小539544字节 - Crash in gallery due to java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 539544 bytes 在AsyncTask中使用Gson编写/读取JSON时发生android.os.TransactionTooLargeException - android.os.TransactionTooLargeException occurs when Writing/Reading JSON with Gson in AsyncTask 碎片化newInstance保存到捆绑的太多数据-android.os.TransactionTooLargeException - Fragment newInstance too much data saved to bundle - android.os.TransactionTooLargeException 调用 TakePicture 时出现 Android TransactionTooLargeException - Android TransactionTooLargeException when calling TakePicture onStart方法中的NoClassDefFoundError-Android - NoClassDefFoundError in onStart method - Android 在 RatingBar DialogFragment 关闭后 Android 应用程序崩溃 - Android app crashes after RatingBar DialogFragment closes
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM