2017-02-18 33 views
6

Issue: ActivityA zaczyna ActivityB ze wspólnymi przejściami elementów sporadycznie zawiesza Nie konsekwentnie powtarzalne poziomy API: 23, 24 i 25IllegalArgumentException w ActivityManagerProxy

kod, aby rozpocząć działalność:

Intent intent = new Intent(this, ActivityB.class); 
Pair<View, String> logoTransition = Pair.create(logo, getString(R.string.transition_logo)); 
Pair<View, String> logoTextTransition = Pair.create(logoText, getString(R.string.transition_logo_text)); 
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, logoTransition, logoTextTransition); 
ActivityCompat.startActivity(this, intent, options.toBundle()); 

Stacktrace (API 23):

Exception java.lang.IllegalArgumentException: 
android.os.Parcel.readException (Parcel.java:1606) 
android.os.Parcel.readException (Parcel.java:1555) 
android.app.ActivityManagerProxy.isTopOfTask (ActivityManagerProxy.java:4787) 
android.app.Activity.isTopOfTask (Activity.java:5753) 
android.app.Activity.cancelInputsAndStartExitTransition (Activity.java:4075) 
android.app.Activity.startActivityForResult (Activity.java:4052) 
android.app.Activity.startActivity (Activity.java:4312) 
android.support.v4.content.ContextCompat.startActivity (ContextCompat.java) 
__null__.getDrawable (ContextCompat.java) 
__null__.isDeviceProtectedStorage (ContextCompat.java) 
com.my.app.activity.ActivityA.startMainActivity (ActivityA.java) 

Czy ktoś wie, co powoduje takie zachowanie? Wszelkie proponowane poprawki do tego?

+0

Co jakim kontekście jest to 'startActivity()' miano, to znaczy to, co jesteś w klasie? – azizbekian

+0

zawołanie z Aktywności –

+0

proszę odnieść się do tego [link] (http://stackoverflow.com/questions/26688374/android-activity-transitions-using-support-v4-up-to-date-withandroid-l) hope to ci pomoże. –

Odpowiedz

3

Przypuszczam, że nie powinieneś używać metod z biblioteki wsparcia dla tych wersji. Jasne, nie mogę się domyślić, z twojego aktualnego problemu z powodu losowego stacktrace.

Od wersji Tranlsation wprowadzono formę 4.4. Możesz dołączyć przestarzałość api. Co więcej, w przeciwnym razie jest zalecane, dlaczego potrzebujemy obu typów?

if (Build.VERSION.SDK_INT >= 21) { 
     ActivityOptions options = ActivityOptions 
     .makeSceneTransitionAnimation(this, logoTransition, logoTextTransition); 
     startActivity(this, intent, options.toBundle()); 
    } 
    else { 
     ActivityOptionsCompat options = ActivityOptionsCompat 
     .makeSceneTransitionAnimation(this, logoTransition, logoTextTransition); 
     ActivityCompat.startActivity(this, intent, options.toBundle()); 
    } 
+2

Uważam, że cały cel ActivityCompat polega na tym, że nie trzeba sprawdzać wersji SDK, aby zastosować nowe funkcje. Czy jesteś pewien, że to rozwiąże mój problem? –

+1

@GaborPeto Dla ActivityCompat yes, ale nie dla opcji type ActivityOptionsCompat. – GensaGames

+0

@GensaGames Nadal mam ten sam wyjątek z tym samym kodem powyżej na urządzeniach Lollipop. jeśli (Build.VERSION.SDK_INT> = Build.VERSION_CODES.LOLLIPOP) { Opcje ActivityOptions = ActivityOptions .makeSceneTransitionAnimation (MyActivity.this, logoImageView, "transition_name"); startActivity (intent, options.toBundle()); } Wyjątek dzieje się podczas startActivity(). – cgr

0

wkładaj przemiany w sposobie onCreate() danej działalności tak:

getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); 

Transition mTransition = //your transitions 
getWindow().setSharedElementEnterTransition(mTransition); 
getWindow().setSharedElementExitTransition(mTransition); 
1

w moim przypadku tak się stało, bo subskrybować na akcji kliknij dwa razy, więc startActivity nazwano dwa razy z rzędu .

nadzieja może to być pomocne dla niektórych jeden :)