![](/img/trans.png)
[英]android.os.TransactionTooLargeException retrieving installed applications
[英]Move from Fragment to Activity Causes android.os.TransactionTooLargeException
我正在嘗試使用 Intent 從 Fragment 移動到 Activity,並且在我運行代碼的地方,它會導致android.os.TransactionTooLargeException
。
我的片段代碼(CardFragment.java):
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
txtName = view.findViewById(R.id.txt_name);
btnFood = view.findViewById(R.id.btn_food);
txtName.setText(mName);
Bitmap bm = StringToBitMap(mImage);
btnFood.setImageBitmap(bm);
btnFood.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), Recipes.class);
intent.putExtra("Name", mName);
intent.putExtra("Recipe", mRecipe);
intent.putExtra("Image", mImage);
startActivity(intent);
}
});
}
mName
、 mRecipe
和mImage
是字符串變量。
我的活動代碼(Recipes.java):
public class Recipes extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recipes);
TextView txtName = findViewById(R.id.txt_name);
TextView txtRecipe = findViewById(R.id.txt_recipe);
ImageView imgView = findViewById(R.id.img_view);
txtName.setText(getIntent().getStringExtra("Name"));
txtRecipe.setText(getIntent().getStringExtra("Recipe"));
Bitmap bm = CardFragment.StringToBitMap(getIntent().getStringExtra("Image"));
imgView.setImageBitmap(bm);
}
}
每次運行此代碼時,都會收到此錯誤消息:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.company.recipeapp, PID: 12160
java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 2355168 bytes
at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:161)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: android.os.TransactionTooLargeException: data parcel size 2355168 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(BinderProxy.java:540)
at android.app.IActivityTaskManager$Stub$Proxy.activityStopped(IActivityTaskManager.java:4408)
at android.app.servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:145)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
這是什么錯誤,我該如何解決? 也許是因為我之前的視圖中有多個CardFragment
? 謝謝您的幫助。
也許使用 getActivity().startActivity(intent) ?
此錯誤意味着您通過 Intent 發送了超過 1 MB 的數據,在這種情況下,您的位圖對於 Intent 來說太大了。
解決方案是減少位圖大小或使用不同的方式來傳遞位圖,如服務等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.