我正在尝试从服务中下载图像并将其显示在活动中,但我一直在努力
java binder FAILED BINDER TRANSACTION
Run Code Online (Sandbox Code Playgroud)
这是我的服务代码
public class DownloadImageService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new LoadImageAsync().execute(intent.getStringExtra("type"));
return Service.START_NOT_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
private class LoadImageAsync extends AsyncTask<String, Void, String> {
byte[] compressedImage;
Bitmap bmp;
String img;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
try {
URL url = new URL(imgUrl);
bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
compressedImage = CompressBitmap.compresssImage(bmp);
img = Base64.encodeToString(compressedImage, …Run Code Online (Sandbox Code Playgroud) 我已经启动了一个Intent并要求它进入主要活动,当它尝试应用程序崩溃时.
以下是尝试转到主要活动的代码.
Intent i = new Intent(
".MAIN_ACTIVITY");
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
这是Main_Activity的XML清单.
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
我对此仍然很陌生,所以任何帮助和/或建议都很有价值.
是否可以在intent extra中传递的字符串数据有最大限制?下面的String str可以容纳多少数据?
intentI1.putExtra("MyString", str);
Run Code Online (Sandbox Code Playgroud) 我试图通过Intent.putExtras这样的方式将数据从一个活动传递到另一个活动:
private ArrayList<HashMap<String, String>> mGroups = new ArrayList<HashMap<String, String>>();
private ArrayList<HashMap<String, String>> mUsers = new ArrayList<HashMap<String, String>>();
...
Bundle data = new Bundle();
data.putInt("mode", mode);
data.putSerializable("groups", (Serializable) mGroups);
data.putSerializable("users", (Serializable) mUsers);
data.putInt("current_class", mCurrentClassId);
data.putInt("current_user", mCurrentUserId);
Intent intent = new Intent(ctx, ChildActivity.class);
intent.putExtras(data);
ctx.startActivityForResult(intent, 0);
Run Code Online (Sandbox Code Playgroud)
这mUsers是一个HashMap<String,String>包含用户数据的列表,包括Base64编码的照片,此列表中的字符串大小总和约为500Kb
startActivityForResult用黑屏调用挂起几分钟然后我得到ANR错误.onCreate根本没有调用子活动.
如果我不在mUsers中添加大字符串(没有Base64编码的照片) - 工作得很好.
请帮忙.
屏幕 1:GridView
屏幕 2:详细信息页面
任务达成:
1)从服务器加载gridview中的所有视频。
2)用户点击gridview项的任意位置。
3) 在详细信息屏幕中打开并播放特定视频。
4) 垂直滚动播放下一个或上一个视频。
目前的实施:
GridFragment {
ArrayList<VideoPostModel> videoPostList;
RecyclerView gridView;
onnItemClick() {
Intent intent = new Intent(this, DetailActivity.class);
intent.putExtra("data", videoPostList);
intent.putExtra("click_index", clickedIndex);
intent.putExtra("pagination_index", paginationIndex);
startActivity(intent);
}
}
Run Code Online (Sandbox Code Playgroud)
DetailActivity {
VerticlaViewPager vertiCalViewPager;
ArrayList<VideoPostModel> videoPostList;
onCreate() {
videoPostList = getIntent().getParcelableArrayListExtra("data");
clickedIndex = getIntent().getIntExtra("clickindex", 0);
paginationIndex = getIntent().getIntExtra("pagination_index", 0);
VideoFragmentStatePagerAdapter viewPagerAdapter = new VideoFragmentStatePagerAdapter(videoPostList);
vertiCalViewPager.setAdapter(viewPagerAdapter);
}
}
Run Code Online (Sandbox Code Playgroud)
问题:
如果 videoPostList 在将数据从片段传递到 Activity 时有更多数据(大约 100 多个 VideoPostModel 对象),则应用程序会崩溃,因为有意图发送数据存在限制(/sf/answers/2593838761/)。
黑客替代方案:
1)静态数组列表
2)Application类中的Arraylist
寻找最佳且有效的解决方案来实现上述功能。 …
android android-intent android-layout android-fragments android-viewpager
当我关闭/最小化我的应用程序时,我遇到了 TransactionTooLargeException。我假设这是由于我的 Bundle 太大(3 个 JSONArrays 作为字符串),但是如果有人可以从我的错误跟踪中诊断出更多信息,那就太好了。
这里是:
05-28 17:17:25.994 9518-9518/com.adamtrudeauarcaro.godbuilder E/JavaBinder: !!! FAILED BINDER TRANSACTION !!! (parcel size = 551100)
05-28 17:17:25.996 9518-9518/com.adamtrudeauarcaro.godbuilder D/AndroidRuntime: Shutting down VM
05-28 17:17:25.998 9518-9518/com.adamtrudeauarcaro.godbuilder E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.package.godbuilder, PID: 9518
java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 551100 bytes
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:4211)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6688)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
Caused by: android.os.TransactionTooLargeException: data parcel size 551100 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:628)
at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:4132)
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:4203) …Run Code Online (Sandbox Code Playgroud)