【问题标题】:Share an arraylist which is being downloaded among activities?在活动之间共享正在下载的arraylist?
【发布时间】: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。而且我不确定使用服务。还有其他优惠吗?

【问题讨论】:

标签: android service


【解决方案1】:

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

  1. 创建类,将其命名为 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。关于异步,据我所知,只要你不改变它不应该是一个问题
  • 我尝试在我的应用中实现您的解决方案,但存在一些重大缺陷。就像我需要当用户在活动之间切换时下载过程保持活动状态。所以这可能只是由服务完成。因此我问了一个新问题。你可能很忙,但我想知道你看一下吗? stackoverflow.com/questions/34534014/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
  • 2019-01-31
  • 2012-07-29
  • 2017-10-25
  • 2014-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多