2017-03-13 14 views
30

Ostatnio czasami otrzymywałem ten wyjątek, gdy funkcja MainActivity wywoływała onResume().Wyjątek java.lang.RuntimeException: nie można wznowić działania za pomocą obiektu java.lang.IllegalArgumentException

java.lang.RuntimeException: Unable to resume activity {com.qau4d.c35s3.androidapp/com.xxx.XXX.XXX.MainActivity}: java.lang.IllegalArgumentException 
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3400) 
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3440) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1510) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6077) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
Caused by: java.lang.IllegalArgumentException 
at android.os.Parcel.readException(Parcel.java:1687) 
at android.os.Parcel.readException(Parcel.java:1636) 
at android.app.ActivityManagerProxy.isTopOfTask(ActivityManagerNative.java:5475) 
at android.app.Activity.isTopOfTask(Activity.java:5961) 
at android.app.Activity.onResume(Activity.java:1252) 
at com.qau4d.c35s3.androidapp.onResume(XActivity.java:29) 
at com.qau4d.c35s3.androidapp.onResume(MainActivity.java:196) 
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1269) 
at android.app.Activity.performResume(Activity.java:6768) 
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3377) 

Zarówno w MainActivity i super klasy XActivity tylko super.onResume();. Naprawdę dziwne jest uzyskać ten wyjątek po długim czasie normalnego rozwoju. Sprawdziłem jakiś względny materiał referencyjny, ale nic nie dostałem.

+5

Czy możesz udostępnić kod? – Cochi

+2

@Keyson Chous, po kodu, co robisz w 'onResume()' – azizbekian

+1

Jaka jest wersja Androida SDK, którego używasz? od kiedy działa normalnie, jakie zmiany wprowadziłeś w strukturze projektu (jak motyw Ui)? –

Odpowiedz

3

Nie ma wystarczających informacji w twoim pytaniu, aby określić przyczynę java.lang.IllegalArgumentException, Niestety android ActivityThread nie rejestruje stosu stosu tego wyjątku, a komunikat o wyjątku wydaje się pusty.

Wygląda jednak na to, że jest jakaś droga naprzód. Wyjątkiem jest obsługiwane przez następujący kod w metodzie ActivityThread::performResumeActivity:

 } catch (Exception e) { 
      if (!mInstrumentation.onException(r.activity, e)) { 
       throw new RuntimeException(
        "Unable to resume activity " 
        + r.intent.getComponent().toShortString() 
        + ": " + e.toString(), e); 
      } 
     } 

Jeśli zarejestrujesz klasa oprzyrządowanie dla swojej działalności, powinno być możliwe zastosowanie metody onException rejestrować StackTrace za wyjątkiem przyczynowego .

Nie rozwiąże to problemu (!), Ale pomoże ci to zbliżyć się do rozwiązania.


1 - Google dla "Android instrumentation onException".

0

w metodzie aktywny # isTopOfTask widzimy:

private boolean isTopOfTask() { 
    if (mToken == null || mWindow == null) { 
     return false; 
    } 
    try { 
     return ActivityManager.getService().isTopOfTask(getActivityToken()); 
    } catch (RemoteException e) { 
     return false; 
    } 
} 

aw ActivityManagerService # isTopOfTask możemy znaleźć:

@Override 
public boolean isTopOfTask(IBinder token) { 
    synchronized (this) { 
     ActivityRecord r = ActivityRecord.isInStackLocked(token); 
     if (r == null) { 
      throw new IllegalArgumentException(); 
     } 
     return r.task.getTopActivity() == r; 
    } 
} 

Tak, myślę, że ActivityRecord jest null.But I don wiesz dlaczego jest nieważny ...

Powiązane problemy