2013-02-05 57 views
1

我正在创建一个应用程序,涉及从资产文件夹中的文本文件中读取数据。对于每个文件,它将数据存储在单独的ArrayList中。这些文件在活动的onCreate()方法中一个接一个地读取。所有文本文件总计1.8 MB,并且在模拟器上,它需要12秒才能加载活动。该应用程序不会在模拟器上崩溃(它只需要大约12秒)。Android:需要异步线程?

我已阅读关于异步线程,但我从来没有需要他们在过去。我打算有一些消息或进度条来通知用户该活动实际上正在加载并且没有崩溃。

所以我的问题是:即使应用程序不加载活动时崩溃,我应该仍然把文件的阅读在异步或不同的线程?如果是这样,我将如何正确地做到这一点? (我从来没有这样做。)

下面是示例代码与文本文件的阅读:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_name); 

    populateArrayLists(); 

} 

public void populateArrayLists() { 
    BufferedReader br = null; 
    try { 
     br = new BufferedReader(new InputStreamReader(getAssets().open(
       "text1.txt"))); 
     String text; 
     while ((word = br.readLine()) != null) { 
      ArrayList1.add(text); 
     }       
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      br.close(); // stop reading 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 


    br = null; 
    try { 
     br = new BufferedReader(new InputStreamReader(getAssets().open(
       "text2.txt"))); 

    // the same process is duplicated for 1-15 
    // it may not be the best or most efficient way but it works 

任何帮助,将不胜感激。

回答

0

是的,你需要一个后台线程。 Loader api可能是你最简单的赌注。

这将允许您至少显示通知并在文件加载时提供一些内容。如果这就是你正在做的事情,甚至可能会加载它们并逐渐显示数据。

编辑:装载机是compatibility library中的3.0功能。如果您不愿意添加依赖项,则始终可以回退到AsyncTask,在这种情况下,您可以查看this

+0

如果可能,你会愿意帮助我开始(将它与我拥有的东西绑在一起)吗? –

+0

我有一段时间没有做Android,所以我不能花时间编写代码(需要大量的重新学习),但是欢迎与我开始聊天室,我会协助你尽我所能吧 – slezica

+0

好的。我实际上已经为我的尝试开辟了另一个问题(请参阅我的链接问题)。请随时查看我所尝试的内容(也许它会引发某些事情?)并投入您的输入。 –