2017-02-18 168 views
6

問題:ActivityA與共享單元轉變開始ActivityB間歇崩潰 不一致地重現 API級別:23,24和25拋出:IllegalArgumentException在ActivityManagerProxy

代碼以啓動活動:

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) 

有誰知道是什麼原因導致此行爲? 對此有何建議修復?

+0

什麼什麼情況下是這樣'startActivity()'調用,即什麼課是你嗎? – azizbekian

+0

從活動 –

+0

調用請參閱此鏈接(http://stackoverflow.com/questions/26688374/android-activity-transitions-using-support-v4-up-to-date-with-android-l)希望這會幫助你。 –

回答

3

我想,你不應該使用該版本的支持庫的方法。當然,我無法弄清楚,從你現有的問題,由於隨機堆棧跟蹤。

由於Tranlsation場景引入了表格4.4。您可以包含API棄用。此外,建議,否則,爲什麼我們需要這兩種類型?

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

我認爲ActivityCompat的全部目的是,您不必檢查SDK版本以應用新的功能。你對此有多信心,這將解決我的問題? –

+1

@GaborPeto對於ActivityCompat是的,但不適用於選項類型ActivityOptionsCompat。 – GensaGames

+0

@GensaGames我仍然在棒棒糖設備上得到與上面相同的代碼的例外。 (Build.VERSION.SDK_INT> = Build.VERSION_CODES.LOLLIPOP){ ActivityOptions options = ActivityOptions .makeSceneTransitionAnimation(MyActivity.this,logoImageView,「transition_name」); startActivity(intent,options.toBundle()); } 在startActivity()發生異常。 – cgr

0

在相關活動的這樣的onCreate()方法嘗試加載轉換:

getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); 

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

在我的情況下,這種情況發生,因爲我上的點擊動作訂閱兩次,所以startActivity被連續叫了兩聲。

希望這可以是有益的某一個:)

相關問題