Mri*_*lla 9 java android android-asynctask android-loader
在我最近的一个SO问题中,有人建议我使用Loader我的解决方案.所以在这里我试图了解如何实现一个简单的AsyncTaskLoader
这是我想出的:
public class Scraper extends AsyncTaskLoader<List<Event>> {
List<Event> lstEvents;
public Scraper(Context context) {
super(context);
}
public List<Event> loadInBackground() {
//This is where I will do some work and return the data
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我所知道的.我阅读了文档,AyncTaskLoader但我从来没有遇到任何如此神秘和混乱的东西.有一百万种方法,所有这些方法都是相互矛盾的,看着它们是不可能的,它们被调用的顺序,甚至它们是否应该被覆盖和调用.这项任务的生命周期是一个该死的噩梦.
我正在寻找的只是简单地抓取一些数据并将其返回.我还想将它存储在一个类变量中,以便我在下一次立即返回它而不必再次刮掉所有数据.
我没有打开游标,流或类似的东西,只是一个简单的变量lstEvents(可能很大).我不想泄漏内存和浪费资源,所以如果有人可以解释我需要关闭/无效的地方和时间以使这项任务有效,我会很高兴.
我应该在哪里将数据存储到类变量中?Shoudl我在我的loadInBackground方法结束时这样做或者我应该在deliverResult方法中这样做吗?
在这个简单的场景中,是否有我真正需要检查任务是否被取消或是否被重置的地方,或者我是否应该简单地不覆盖这些方法并让它AsyncTaskLoader处理它.
如果有人知道,一些脚手架代码会有所帮助.万分感谢.
在我最近的一个SO问题中,有人建议我使用Loader作为我的解决方案.
这可能不是一个好建议.
这项任务的生命周期是一个该死的噩梦.
更不用说Loader合同表明您应该能够动态检测数据中的更改并自动将更新传递给使用该数据的更新Loader,这ContentProvider对于其他设备上的商店来说很容易,并且对于像你这样的场景.
坦率地说,我只是使用AsyncTask并称之为好.
话虽这么说,您可以看看我为SQLite数据库(sans )所做的Loader实现ContentProvider以及SharedPreferences自定义加载器的示例.您需要实现的唯一方法
是loadInBackground()和onStartLoading().如果内置实现不足,你可能需要deliverResult()- 在你的情况下,我怀疑内置的实现是不错的.您可以添加一些其他方法,正如您将在我AbstractCursorLoader看到的那样,但我再次怀疑您不需要它们.
有哪些地方我真的需要检查任务是否被取消或是否重置或我应该只是不覆盖这些方法并让AsyncTaskLoader处理它.
从让它AsyncTaskLoader处理开始,只有当你因某种原因确定需要它们时才担心它们.
| 归档时间: |
|
| 查看次数: |
2613 次 |
| 最近记录: |