如何(或避免)在Android应用程序中永久运行服务?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何(或避免)在Android应用程序中永久运行服务?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2246字,纯文字阅读大概需要4分钟。
内容图文
这个问题在如何编写好的和好的程序的更哲学问题和如何保存电池和系统资源的基于事实的问题之间是一种平衡行为.具体来说,它的Android服务,为了执行所需的任务,必须在手机后台永久运行.
在我的情况下,我有几个服务在后台运行.一个人扫描手机是否连接到WiFi,如果是,则设置一个变量,一个检查位置并更新位置,如果找到足够精确的位置,一个检查接近传感器,一个分析噪声水平,开检查RSS-Feed以获取更新…
该应用程序有几个问题,我认为它们可能源于此设计决策.大多数情况下(除了通过SensorEventListener提供更新的位置服务和接近传感器),我所有服务的架构都是这样的
public class ArchetypicalService extends Service
{
Checker checker;
public SharedPreferences prefs;
public final static String PREFS = Constants.PREFS;
@Override
public IBinder onBind(Intent intent)
{
return null;
}
@Override
public void onCreate()
{
prefs = getSharedPreferences(PREFS, 0);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
checker = new Checker();
checker.run();
return START_STICKY;
}
@Override
public void onDestroy()
{
super.onDestroy();
}
private class Checker implements Runnable
{
private Handler handler = new Handler();
public static final int checkingDelay = 1000; // this number varies depending on what purpose this service has
@Override
public void run()
{
//what happends here depends on what the service does
handler.postDelayed(this, checkingDelay);
}
}
}
应用程序启动时会启动这些服务.像这样:
Intent intent = new Intent(this,ArchetypicalService.class);
startService(intent);
感谢START_STICKY,即使我们停止活动,服务也会继续运行.当我写这篇文章时,这对我来说似乎都是教科书,但我使用android的次数越多,我就会越多地看到博客条目告诉我永久运行的服务不应该实现.他们是坏的风格,使应用程序更容易崩溃并耗尽电池和电话资源.这可能都是正确的:我的应用程序崩溃了很多,耗尽了电池.
所以,我的问题是:如果必须在后台定期完成功能,如传感器扫描或检查互联网上的数据,即使所有活动都已关闭,有没有更好的方法来实现它? (虽然我欢迎所有的答案或想法,但我会欢迎那些提供更多有用示例代码的人)
解决方法:
http://developer.android.com/guide/components/services.html.服务不创建单独的线程.如果它是一个长时间运行的操作,你需要在线程中运行它们.因此,如果有很多服务,那么运行主ui线程上的所有内容将消耗内存.确保在线程中运行.可能会解决您的应用崩溃问题.另请查看此链接. How can I keep requesting a page every 5 seconds and not kill the battery?.
内容总结
以上是互联网集市为您收集整理的如何(或避免)在Android应用程序中永久运行服务?全部内容,希望文章能够帮你解决如何(或避免)在Android应用程序中永久运行服务?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。