我正在尝试将大小为2或3 MB的字符串数组传递给另一个活动。块没有被传递,我在logcat中唯一可以看到发生的事情就是......
!!!失败的粘合剂交易!!!
我尝试创建自己的类来实现Serializable,在其中放置一个mutator,我将String放入其中,然后将Object引用传递给intent.putExtra(key,Serializable obj)
代码:
MyClass mc = new MyClass();
Intent intent = new Intent(MainActivity.this, CalculationsActivity.class);
intent.putExtra("mc", mc);
是否有解决此问题的简单方法 - 即将大型字符串数组传递给另一个活动?
class MyClass implements Serializable {
private String[] str;
public void setString(String[] str) {
this.str = str;
}
public String[] getString() {
return this.str;
}
}
我认为只传递一个参考不会导致这个。引用不过是一个memoryaddress
答案 0 :(得分:1)
正如其他人所说,使用本地文件(在沙盒目录中)或数据库条目可能是最佳选择。但是,如果您想要远程(例如ftp)托管该文件并在应用程序加载时仍加载它们,则应使用服务。 (见Docs)。
我之前有两个答案,更深入地解释了你应该看的服务。
How to use threads and services. Android 和 Android Service with multiple Threads
基本上虽然有两种类型,一个绑定线程(与活动或应用程序一起生活)和意图服务(它们可以始终处于活动状态,或仅在应用程序打开时才处于活动状态)。您想要的可能是前者,它看起来就像第一个链接中的内容。
这是一个片段
public class BoundService extends Service {
private final BackgroundBinder _binder = new BackgroundBinder();
//Binding to the Application context means that it will be destroyed (unbound) with the app
public IBinder onBind(Intent intent) {
return _binder;
}
//TODO: create your methods that you need here (or link actTwo)
// Making sure to call it on a separate thread with AsyncTask or Thread
public class BackgroundBinder extends Binder {
public BoundService getService() {
return BoundService.this;
}
}
}