在活动之间共享正在下载的arraylist?

Posted

技术标签:

【中文标题】在活动之间共享正在下载的arraylist?【英文标题】:Share an arraylist which is being downloaded among activities? 【发布时间】:2016-04-03 15:23:43 【问题描述】:

我是安卓新手。在我的应用程序中,我有一个 arrayList,它被从 Internet 下载的对象填充。同时我需要两个活动来访问arraylist,无论它是否完成。我知道有关服务的事情,但我不知道如何编码。有什么帮助吗?我的代码如下所示:

class A extends Service 
    void foo()
    //uses a loop to get elements from internet 
    //then adds the elements to myArraylist in each loop
   

class B extends Activity 
    //needs to have access to myArraylist asynchronously

class C extends Activity 
    //needs to have access to myArraylist asynchronously

顺便说一句,对于任何活动,这两个活动不会同时调用 myArrayList。而且我不确定使用服务。还有其他优惠吗?

【问题讨论】:

见这里***.com/questions/22984696/… 或***.com/questions/7057845/… sharedpref 和 arraylists 都不是我关心的!在那里没有发现任何有用的东西。不过谢谢! 【参考方案1】:

我相信实现它的最好方法是使用Application 类:

    创建类,将其命名为 MyApplication,并使用 getter 和 setter 创建 ArrayList 的字段成员,如下所示:

    class MyApplication extends Application 
         ArrayList<Object> downloadedArray;
    
         public void setDownloadedArray(ArrayList<Object> downloadedArray) 
            this.downloadedArray = downloadedArray;
          
    
          public ArrayList<Object> getDownloadedArray() 
    
              return downloadedArray;
          
    
    

2 将清单中的条目添加到此类:

  <application
    android:name=".MyApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:theme="@style/AppTheme">

3 下载完成后调用setter:

 void foo()
    //uses a loop to get elements from internet
    //then adds the elements to myArraylist in each loop
    ((MyApplication)getApplication()).setDownloadedArray(yourArray);

4 现在您可以从任何Activity 访问此数组,只需:

        ArrayList<Object> downloadedArray = ((MyApplication)getApplication()).getDownloadedArray();

只是不要忘记检查 ArrayList 是否不为空。

【讨论】:

似乎是一个不错的解决方案。但是我需要访问数组列表,即使在它被填充的时候(当元素被下载和添加时)。那这可能吗?并且不会导致异步访问arrayList(同时访问多个)的结果出错吗? 所以在数组创建后立即调用setter。关于异步,据我所知,只要你不改变它不应该是一个问题 我尝试在我的应用中实现您的解决方案,但存在一些重大缺陷。就像我需要当用户在活动之间切换时下载过程保持活动状态。所以这可能只是由服务完成。因此我问了一个新问题。你可能很忙,但我想知道你看一下吗? ***.com/questions/34534014/…

以上是关于在活动之间共享正在下载的arraylist?的主要内容,如果未能解决你的问题,请参考以下文章

在进程之间共享活动对象的正确方法是啥?

不同活动的片段之间的共享元素转换

不同活动的片段之间的共享元素转换

视图之间的共享元素转换(不是活动或片段)

如何在两个活动之间共享一个视图?

使用 parcelable 将项目存储为共享首选项?