我已经实现了一个简单的Android Service
,默认情况下,它部署在与我的app / apk相同的进程中。我希望服务与每个Activity
同时运行。为了实现这一点,在每个Activity.onStart()
和Activity.onStop()
实现中,我都有分别调用Activity.bindService()
和Activity.unbindService()
的逻辑。
嗯,所有这一切都很好,但感觉很尴尬。有没有其他方法可以确保Service
持续运行并绑定到所有活动,而无需为每个活动重新调用Activity.bindService()
和Activity.unbindService()
?在这种情况下Service
是否应该被声明为一个独立的过程?
此外,我的服务启动一个单独的线程,但永远不会停止它。我的代码应该停止线程吗?线程有可能成为孤儿吗?使用OnUnbind
/ OnRebind
开始/停止主题似乎有点矫枉过正。
答案 0 :(得分:0)
您可以在自定义应用程序类中启动服务。这样,只有在启动应用程序时才会启动服务。
例如:
public class MainApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
starService();
}
public void starService() {
Intent i = new Intent(this, YourService.class);
this.startService(i);
}
}
答案 1 :(得分:0)
虽然其他答案很好,但您可能想问这个问题: "该服务是否需要在应用程序不运行时继续运行,并且不会运行?"
答案 2 :(得分:0)
创建一个基础Activity
并在bindService
onStart
unbindService
onStop
中呼叫public class BaseActivity extends Activity {
@Override
public void onStart() {
// ...
bindService(intent, serviceConnection, flags);
}
@Override
public void onStop() {
// ....
unbindService(serviceConnection);
}
}
。
startService
这将确保扩展base的每个活动都绑定到服务。
当最后一个活动从服务中解除绑定时,它将被停止。如果要避免这种情况,请先调用Service
,然后绑定到它。即使您没有正在运行的活动,这也会阻止服务停止。
在这种情况下,服务是否应该被声明为独立流程?
在您的情况下,您不需要单独的服务流程。
此外,我的服务启动一个单独的线程,但永远不会停止它。我的代码应该停止线程吗?
如果要停止服务,则应该停止线程,因为线程是GC根,并且可以从中访问的所有对象都将保留在内存中。因此,未使用的无限线程是内存泄漏。
您可以根据需要以不同方式实施线程。您可以在ThreadPoolExecutor
或Handler
或()
中实施常规线索。选择一个符合您需求的解决方案。