将大型字符串数组传递给另一个Activity

时间:2014-08-05 17:11:45

标签: android android-intent android-activity arrays

我正在尝试将大小为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

1 个答案:

答案 0 :(得分:1)

正如其他人所说,使用本地文件(在沙盒目录中)或数据库条目可能是最佳选择。但是,如果您想要远程(例如ftp)托管该文件并在应用程序加载时仍加载它们,则应使用服务。 (见Docs)。

我之前有两个答案,更深入地解释了你应该看的服务。

How to use threads and services. AndroidAndroid 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;
        }
    }
}