我正在制作一个Android应用程序。 我通过在主Activity
中的onCreate方法中调用方法startService来启动我的启动活动中的服务@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getActionBar().hide();
setContentView(R.layout.activity_main);
starService();
}
private void starService() {
startService(new Intent(getBaseContext(), HelenaService.class));
}
当我做一个祝酒词,看看我的服务中如何调用这些方法。我看到这个方法被调用了两次..
@Override
public void onStart(Intent intent, int startId) {
Toast.makeText(this, "service started", Toast.LENGTH_SHORT).show();
}
我的意思是,我可以看到第一个吐司立即呼叫,几秒钟后出现完全相同的吐司信息。
如何确保仅调用onStart方法一次。尝试了一个标志,但变量重新启动。
有任何帮助吗?还是建议?
答案 0 :(得分:0)
标志变量正在“重新启动”,因为您正在starService()
中启动新服务如果没有看到更多代码,我可以看到解决方案是在starService()
中放置一个标志private Boolean flag = true;
然后:
private void starService() {
if (flag){
startService(new Intent(getBaseContext(), HelenaService.class));
flag = false;
}
}
答案 1 :(得分:0)
String TAG = CLASSNAME.class.getConicalName();
在相应的方法中放置Log.e(TAG, "---onStart()---");
和Log.e(TAG, "---onStartCommand()---");
。
检查“错误”下的LogCat,如果您看到这两个日志,则会调用这两种方法。
如果在服务启动时调用了这两个方法,并且它们都包含toast,那么这就是你看到Toast两次的原因。
此外,如果在关闭应用程序后服务继续运行,您可能希望在应用程序设置中强制停止/清除数据。您将需要实现逻辑来停止服务,例如stopSelf();