Java android.os.TransactionTooLargeException位于android.app.DialogFragment.onStart

Java android.os.TransactionTooLargeException位于android.app.DialogFragment.onStart,java,android,Java,Android,我的应用经常出现以下问题: 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 and

我的应用经常出现以下问题:

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)
我查过一些数据,上面说交易数据不能太大(>1MB),但我不知道大数据是怎么来的;创建时,我只是将Integer参数转换为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;
}

我认为它不是太大,谁知道其他原因呢?谢谢

My 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();
}
公共类VideoEndDialog扩展DialogFragment{
私有静态字符串PARAM1=“currentPos”;
私有静态字符串PARAM2=“maxPos”;
私有int currentPos=0;
私有整数maxPos=0;
私人监听者;
私有长mLastClickTime=0;
最后一集的框架布局;
框架布局下一步;
框架布局连续追踪;
框架布局出口;
文本查看最后一幕文本;
text视图nextEpisodeText;
公共静态VideoEndDialog getInstance(int currentPos,int maxPos){
VideoEndDialog VideoEndDialog=新建VideoEndDialog();
Bundle=新Bundle();
bundle.putInt(参数1,当前位置);
bundle.putInt(PARAM2,maxPos);
videoEndDialog.setArguments(bundle);
返回videoEndDialog;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
此.setCancelable(false);
currentPos=getArguments().getInt(参数1);
maxPos=getArguments().getInt(PARAM2);
//Toast.makeText(getActivity(),“currentPos:+currentPos+”“maxPos:+maxPos,Toast.LENGTH_LONG).show();
}
@凌驾
公共事务主任(活动){
超级转速计(活动);
if(OnClickListener的活动实例){
mListener=(OnClickListener)活动;
}否则{
抛出新的RuntimeException(activity.toString()
+“必须实现VideoEndDialog.OnClickListener”);
}
}
@凌驾
public void onStart(){
super.onStart();
mLastClickTime=getCurrentTime();
//Toast.makeText(getActivity(),“mLastClickTime:+mLastClickTime,Toast.LENGTH_LONG).show();
}
私有int getCurrentTime(){
int currentTime=0;
SimpleDataFormat SimpleDataFormat=新的SimpleDataFormat(“HHmmss”);
currentTime=Integer.parseInt(SimpleDataFormat.format(new Date());
返回时间;
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState)
{
Dialog=getDialog();
dialog.getWindow().requestFeature(Window.FEATURE\u NO\u TITLE);
dialog.getWindow().setBackgroundDrawable(新的ColorDrawable(Color.TRANSPARENT));
dialog.setOnKeyListener(新的DialogInterface.OnKeyListener(){
@凌驾
公共布尔onKey(DialogInterface对话框、int-keyCode、KeyEvent事件){
开关(钥匙代码){
case KeyEvent.KEYCODE\u返回:
如果(getCurrentTime()-mLastClickTime<2){
返回false;
}否则{
VideoEndDialog.this.discouse();
返回true;
}
}
返回false;
}
});
视图=充气机。充气(R.layout.video\u end\u对话框,容器);
LastSpoint=(FrameLayout)view.findViewById(R.id.last_Spoint);
nextEpisode=(FrameLayout)view.findviewbyd(R.id.next\u插曲);
continueWatch=(FrameLayout)view.findViewById(R.id.continue\u watch);
exit=(FrameLayout)view.findViewById(R.id.exit);
lastEpisodeText=(TextView)view.findViewById(R.id.last\u session\u text);
nextEpisodeText=(TextView)view.findViewById(R.id.next\u session\u text);
setViewData();
continueWatch.requestFocus();
返回视图;
}
@凌驾
公共无效显示(碎片管理器,字符串标记){
试一试{
//在每个添加事务前增加一个去除事务,防止连续的添加
manager.beginTransaction().remove(this.commitAllowingStateLoss();
超级秀(经理,标签);
}捕获(例外e){
//同一实例使用不同的标签会异常,这里捕获一下
e、 printStackTrace();
}
}
@凌驾
公共void onDismiss(对话框接口对话框){
super.onDismiss(对话框);
mLastClickTime=0;
mListener.onDismiss();
}
私有void setViewData(){
//是否有上一集
如果(currentPos=maxPos-1){
//没有有下一集
nextEpisodeText.setTextColor(getResources().getColor(R.color.un_focus));
}
//设置点击
LastSession.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(currentPos=maxPos-1){
Toast.makeText(getActivity(),“亲,没有下一集",吐司。长度(短)。show();
}否则{
++currentPos;
mListener.onPlay(currentPos);
//Toast.makeText(getActivity(),“currentPos:+currentPos+”“maxPos:+maxPos,Toast.LENGTH_LONG).show();
VideoEndDialog.this.discouse();
}
}
});
continueWatch.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
mListener.onPlayCurrent();
VideoEndDialog.this.discouse();
}
});
exit.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
mListener.onExit();
VideoEndDialog.this.discouse();
}
});
}
公共接口侦听器{
公共无效在线播放(int playPos);
公共void onPlayCurrent();
公共无效onExit();
公共无效性原则();
}

}

如果您收到一个
TransactionTooLargeException
您应该提供一些证据,说明为什么您仍然认为“它不是太大”,我不确定,也许我应该粘贴整个代码