gpt4 book ai didi

android - 服务在 Activity 销毁时再次调用 onStart

转载 作者:搜寻专家 更新时间:2023-11-01 09:03:35 25 4
gpt4 key购买 nike

我有一个 android 服务,在 onStart 方法中我从 Intent Activity 中获取许多字符串,然后执行 AsynTask 从互联网下载文件。

当 Activity 运行时这一切正常,但是当我停止 Activity 时,这会重新启动 onStart 方法,但显然 Intent 为 null 导致我出现 nullPointerException。

我可以做什么服务不在 onStart 上进入,并继续第一个异步任务下载所有文件?

这是我的代码

    @Override
public void onStart(Intent intent, int startId) {
desde = intent.getIntExtra("desde", 0);
hasta = intent.getIntExtra("hasta", 1);
email = intent.getStringExtra("email");
password = intent.getStringExtra("password");

new DescargaFotos().execute();

}

@Override
public IBinder onBind(Intent intent) {

return null;
}

并在 Inicio.java(UI Activity )

Intent iService = new Intent(contexto,


ServiceDownloader.class);
iService.putExtra("desde", 0);
iService.putExtra("hasta", 5);
iService.putExtra("email", email);
iService.putExtra("password", password);
startService(iService);

编辑:

新问题:

我正在使用 IntentService 并像这样绑定(bind)服务:

Intent iService = new Intent(contexto,
ServiceDownloader.class);

ServiceConnection serviceConector = new ServiceConnection() {

@Override
public void onServiceDisconnected(ComponentName name) {
Log.i("INFO", "Service bound ");
}

@Override
public void onServiceConnected(ComponentName name,
IBinder service) {
Log.i("INFO", "Service Unbound ");
}
};

iService.putExtra("desde", 0);
iService.putExtra("hasta", 50);
iService.putExtra("email", email);
iService.putExtra("password", password);
startService(iService);
bindService(iService, serviceConector,
Context.BIND_AUTO_CREATE);

现在我的问题是,在我的 galaxy nexus 中,如果我进入应用程序运行时列表并销毁我的应用程序,服务会停止、停止下载、停止发送通知等吗?我必须如何绑定(bind)服务才能解决这个问题?

最佳答案

使用 IntentService。 IntentService 是专门为做你想做的而设计的。您不必实现 onStart、onStartCommand 等。该工作在后台线程上运行。工作完成后,线程将被销毁。

无论 Activity 的状态如何,IntentService 都会继续运行。

您可能会遇到的一个问题是您在 Activity 的错误位置发送了 Intent,或者您没有检查操作是否完成。在发送 Intent 之前,检查 SharedPreferences 中的一个标志(如果该标志不存在,则表示您是第一次启动)。当您发送 Intent 时,在 SharedPreferences 中存储一个标志以指示您发送了它。当您的 IntentService 收到 Intent 时,让它更新标志以表明它收到了它。在 IntentService 完成之前,让它再次更新标志。等等。

关于android - 服务在 Activity 销毁时再次调用 onStart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13494487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com