- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 IntentService 查询 MediaStore 以获取歌曲、专辑、艺术家等等。这样,如果有人试图添加整个艺术家并且有很多专辑,IntentService 可以执行昂贵的操作,从艺术家那里获取所有专辑,然后循环遍历它们以获取每张专辑中的所有歌曲,它不会占用用户界面,以便应用程序仍然可以运行。我的问题/问题是,有没有办法从同一个服务调用多次发送结果?
示例:有人点击了一位艺术家。这将使用 artist_id 启动 IntentService,然后 IntentService 开始执行其工作。我希望发生的是,IntentService 获取第一张专辑,然后是第一首歌曲并将结果发回,但它还会继续处理其余的专辑和歌曲,然后在完成后将它们全部发回.我不知道这是否有意义,所以这是我当前设置的示例...
基础 Activity ...
public GetSongsReceiver receiver;
public GetSongsReceiver.Receiver returnReceiver = new GetSongsReceiver.Receiver() {
@Override
public void onReceiveResult(int resultCode, Bundle resultData) {
if(resultCode == RESULT_OK) {
ArrayList<Song> songs = resultData.getParcelableArrayList("songs");
if(songs != null && songs.size() > 0) {
if(musicBound) {
musicService.addAllSongs(songs);
musicService.playSong();
}
}
}
};
...
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
//processing and such.
if(musicBound) {
musicService.setPlayType(MusicService.PlayType.ARTIST);
Intent i = new Intent(BaseActivity.this, GetPlaylistItemsService.class);
Bundle extras = new Bundle();
extras.putParcelable("key", data.getParcelableExtra("artist"));
extras.putString("service_type", "artist");
extras.putParcelable("receiver", returnReceiver);
i.putExtras(extras);
startService(i);
}
}
获取播放列表项服务...
@Override
protected void onHandleIntent(Intent intent) {
ResultReceiver rec = intent.getParcelableExtra("receiver");
Artist artist = intent.getParcelableExtra("key");
ArrayList<Album> albums = getAlbumsFromArtist(artist);
ArrayList<Song> songs = new ArrayList<>();
for(Album album : albums) {
songs.addAll(getSongsFromAlbum(album);
}
Bundle extras = new Bundle();
extras.putParcelableArrayList("songs", songs);
rec.send(Activity.RESULT_OK, extras);
}
我希望能够将“rec.send...”发送多次。这样我就可以获得第一张专辑和第一首歌曲,将结果发回以便媒体播放器可以开始播放,然后在后台处理其余部分并在完成后添加它们。这意味着 IntentService 需要能够 rec.send 不止一次。这可能吗,或者我是否需要将其分成 2 个不同的 IntentService 调用,一个用于获取第一个项目,另一个用于获取其余项目?
最佳答案
it won't take up the ui so the app can still function
为此您不需要 IntentService
。一个普通的后台线程(可能绑定(bind)到 LiveData
)、AsyncTask
、RxJava 链等都可以处理这个。
That would mean the IntentService would need to be able to rec.send more than once. Is that possible
当然。使用普通的后台线程、AsyncTask
、RxJava 链等会更高效。但是,您应该能够根据需要多次send()
。结果将一次一个地传递给 onReceiveResult()
(即,您调用 send()
6 次,您将获得 6 个 onReceiveResult()
通话)。
关于java - 从 IntentService 多次发送结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51333624/
我有一个包含很多歌曲的 ListView 。每次点击一首歌曲时,我都会调用一个 IntentService 来按顺序下载这首歌曲。 但有时我想取消下载(例如:第 5 次)。这意味着我需要停止第 5 个
我有这个 IntentService (HttpService),它从网络服务中获取原始 json 数据: public class HttpService extends IntentService
我想将回调传递给 IntentService。这是我当前的代码: 我的回调接口(interface) import android.os.Message; public interface Sampl
在我的 Android 应用程序中,我有一个带有适配器的简单 ListView 。有一个繁重的查询是用数据填充 ListView 。所以我把它放到另一个线程中运行的 IntentService 中。
我只想写一个“Hello World IntentService App”。不幸的是,我无法做到这一点。 问题: MyIntentService.enqueueWork() 方法不起作用。 Inten
我有 5 个 IntentServices,它们在与主 UI 不同的时间和单独的进程中运行。当服务完成时,它们通过 Intent 将数据发送到主进程。我想知道 5 个服务是否占用了我的应用程序过多的内
我正在构建一个应用程序,通知将在特定时间响起,如果无人看管 15 分钟,通知就会消失。当我插入设备并运行代码时它就可以工作。然而,一旦我拔掉设备并运行应用程序,通知就会起作用,但如果无人看管,它不会在
我构建了一个应用程序,它使用 IntentService 来操作应用程序的数据库和调用网络服务。 例子: 我有一个 Activity ,它是一个项目列表。此列表由 CursorAdapter 填充。每
我遇到了一个问题。 IntentService UpdateService02 偶尔会运行失败。我放入了日志条目以便进行调试,这就是我得到的... 02-28 21:37:32.461: Main -
我正在使用 IntentService 执行后台任务,例如从远程服务器更新数据。 在某些情况下,同一个请求可以被用户多次排队,但我只想执行一次(连续两次从服务器更新数据没有意义)。 是否有使用 Int
我正在使用 Android AlarmManger 安排 IntentService 在较小的间隔后运行。 这是我的 AlarmManger: static void setNextSchedule(
我的 IntentService 看起来像这样: public class MusicService extends IntentService{ final static String NA
我遇到了一个奇怪的情况,我构建的对象在方法 onHandleIntent 中返回为 null,我不知道为什么或如何解决它。 我的 Activity @Override protected vo
我搜索了很多,但我不知道如何在单击按钮时停止 IntentService。我有一个启动 IntentService 的按钮,然后 progressDialog 显示通过 ResultReceiver
我正在尝试用 Kotlin 编写一个 CallRecorder 应用程序。我想要做的是开始使用 BroadcastReceiver 启动的服务录制音频。我认为我在 MediaRecorder 初始化方
只是想阐明我对 IntentService 在达到 terminating 状态后如何由操作系统管理的理解。通过终止,我的意思是当当前 Activity 被销毁或应用程序进程被终止时,根据以下文档:
我正在使用 IntentService 访问不同的网络服务方法并更新我的 ContentProvider。我看到的问题是,有时,我向 IntentService 发送了一个新的 Intent,但是 I
我想我明白了 IntentService 类的意义。它处理一个队列,防止太多或更多的服务实例一起执行。 我发现它很有用,但是如果我从 IntentService 派生了太多具有不同用途的类,并且我希望
我有一个 IntentService,它在启动时启动并在后台保持运行。没有启动器 Activity,IntentService 由广播接收器调用。它适用于 2.3.4 和 4.0.4 设备,但不适用于
我编写了一个发送命令行的 IntentService。与我尝试对控制台进行编程的 Activity 有关。该 Activity 的目的是执行“命令提示符”,我可以在其中向服务器发送消息或从服务器接收消
我是一名优秀的程序员,十分优秀!