我阅读了有关AsyncTasks,服务等的整个文档。
很清楚远程服务的用途。但是我遇到麻烦了,无法从LocalService中受益?典型示例是“播放音乐”或下载大文件。但是,为什么要为此启动本地服务?
我做了一个小的异步任务,模拟了这样一个任务。
AsyncTask<String, Integer, String> async = new AsyncTask<String, Integer, String>() {
@Override
protected String doInBackground(String... params) {
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(500);
System.out.println(i);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
return null;
}
};
async.execute("");
多数答案是,(本地)服务用于长时间运行的活动,即使关闭主活动也必须运行。好的-但是我也可以通过Main Activity中的Async任务来做到这一点:
Button btnFinish = (Button) findViewById(R.id.button1);
btnFinish.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
按下按钮会调用onDestroy(),但异步任务仍在运行吗?难道不像从服务启动AsyncTask一样吗?
//编辑:
我进行了一些测试,并且我很确定异步任务在该过程中会一直存在。因此,如果我将其包装到本地服务(通用方式)中,则该过程也将一直存在,只要过程...
那么,为什么每个人都使用本地服务来执行诸如下载文件,同步...等任务?
最佳答案
多数答案是,(本地)服务用于长时间运行的活动,即使关闭主活动也必须运行。好的-但是我也可以通过Main Activity中的Async任务来做到这一点:
并非没有内存泄漏。切勿从组件泄漏螺纹。当活动被销毁时,请确保该活动启动的所有线程都将快速关闭。
我进行了一些测试,并且我很确定异步任务在该过程中会一直存在。
正确。但是,如果没有服务,则该过程可能会在用户离开前台活动并转到其他一些应用程序后仅持续几毫秒。
服务是标记,告诉Android“哟!我还在这里工作,哟!”。该标记不能无限期地保持该进程的正常运行,但是对于通常要运行几分钟或几小时的事物,它通常效果很好。
该服务还具有自己的生命周期,与活动无关。例如,如果您希望每隔15分钟获得控制权来进行一些工作,则正确的解决方案是使用AlarmManager
和IntentService
,并且此应用可能没有活动。
那么,为什么每个人都使用本地服务来执行任务,例如下载文件,同步
因为我们希望它能正常工作。