从USB拔下时,Android应用程序崩溃了

时间:2012-07-17 17:46:19

标签: android crash usb

我的应用程序启动Activity,使用两个Fragments来提供List中所选项目的详细信息。

启动时,应用读取外部存储上的SQLite数据库。 此外,它还从外部存储上的xml文件中收集数据。

一切都很顺利:)

但是因为我正在使用抽象类来重用我的详细信息Fragments中的代码,所以应用程序开始表现得很奇怪。 当我插入或从usb 拔出设备时,细节Fragment已打开或隐藏 - 应用程序崩溃。

  

“抱歉,应用程序xyz意外停止了....请尝试   再次“

我认为它与细节Fragments相关联。我不知道这是肯定的,因为如果拔下设备,调试器或日志记录将无法工作:D
但所有其他功能都能正常工作。

如果拔下设备,该应用会发生什么变化?也许我可以介入那里......

AbstractDetailFragment

public AbstractWISDetailFragment(ChooseData cData) {
        this.data = cData;
    }

@Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        setDetail();
        view.setClickable(true);
    }

protected abstract void setDetail();


ImplFragment

public ActorDetailFragment(ChooseData data) {
    super(data);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.akteur_detail, container, false);
    return view;
}
@Override
protected void setDetail() {
    // something
    ...
}


编辑:

这是我从触摸列表项到实例化细节片段的那一刻的logcat条目:

I/InputReader(  305): dispatchTouch::touch event's action is 0, pending(waiting
finished signal)=0
I/InputDispatcher(  305): Delivering touch to current input target: action: 0, c
hannel '41a8fc30 ...ChooseActivity (server)'
I/InputDispatcher(  305): Delivering touch to current input target: action: 0, c
hannel 'TouchIntercepter (server)'
I/InputReader(  305): dispatchTouch::touch event's action is 1, pending(waiting
finished signal)=0
I/InputDispatcher(  305): Delivering touch to current input target: action: 1, c
hannel '41a8fc30 ...ChooseActivity (server)'
I/InputDispatcher(  305): Delivering touch to current input target: action: 1, c
hannel 'TouchIntercepter (server)'
D/WIS_ActorList( 2686): new actor item data set (process reseted)
D/WIS_ChooseActivity( 2686): ProcessButton enabled
D/WIS_ChooseActivity( 2686): ProcessStartButton disabled
D/WIS_ChooseActivity( 2686): ProcessStartButton disabled
D/HierarchicalStateMachine(  305): handleMessage: E msg.what=65619
D/HierarchicalStateMachine(  305): processMsg: ConnectedState
D/WifiStateMachine(  305): ConnectedState{ what=65619 when=-3ms arg1=4 }
D/HierarchicalStateMachine(  305): handleMessage: X
D/HierarchicalStateMachine(  305): handleMessage: E msg.what=65619
D/HierarchicalStateMachine(  305): processMsg: ConnectedState
D/WifiStateMachine(  305): ConnectedState{ what=65619 when=-3ms arg1=4 }
D/HierarchicalStateMachine(  305): handleMessage: X
D/dalvikvm( 2305): GC_EXPLICIT freed 329K, 9% free 6875K/7495K, paused 7ms+2ms
W/PowerManagerService(  305): Timer 0x3->0x3|0x1
D/HierarchicalStateMachine(  305): handleMessage: E msg.what=65619
D/HierarchicalStateMachine(  305): processMsg: ConnectedState
D/WifiStateMachine(  305): ConnectedState{ what=65619 when=-4ms arg1=4 }
D/HierarchicalStateMachine(  305): handleMessage: X
D/HierarchicalStateMachine(  305): handleMessage: E msg.what=65619
D/HierarchicalStateMachine(  305): processMsg: ConnectedState
D/WifiStateMachine(  305): ConnectedState{ what=65619 when=-4ms arg1=4 }
D/HierarchicalStateMachine(  305): handleMessage: X
D/HierarchicalStateMachine(  305): handleMessage: E msg.what=65619
D/HierarchicalStateMachine(  305): processMsg: ConnectedState
D/WifiStateMachine(  305): ConnectedState{ what=65619 when=-4ms arg1=4 }
D/HierarchicalStateMachine(  305): handleMessage: X

如果我拔掉设备,logcat会自行杀死。

1 个答案:

答案 0 :(得分:0)

显然,拔下设备后,活动活动将恢复。如果 - 在我的情况下 - 您不使用 setArgument 并将 Bundles 传递给您的片段,则会出现问题。
因此,我有一个类似于空指针的东西,因为我的片段无法重新初始化iteself并且它的数据对象通过构造函数传递。
Eclipse告诉我不要使用非标准构造函数。这样,通过参数扩展的基本数据对象就无法工作。

溶液:
只需与Bundle交换数据(这就是它的完成方式):

Bundle extra = new Bundle();
extra.putSerializable("myData" this.data);
Fragment fragment = new fragment ();
fragment.setArguments(extra);
tada - 一切正常 如果你在所有的活动中都记住这一点,并打算你不会遇到任何残疾。

HF