这个问题在如何编写好的和好的程序的更哲学问题和如何保存电池和系统资源的基于事实的问题之间是一种平衡行为.具体来说,它的Android服务,为了执行所需的任务,必须在手机后台永久运行.
在我的情况下,我有几个服务在后台运行.一个人扫描手机是否连接到WiFi,如果是,则设置一个变量,一个检查位置并更新位置,如果找到足够精确的位置,一个检查接近传感器,一个分析噪声水平,开检查RSS-Feed以获取更新…
该应用程序有几个问题,我认为它们可能源于此设计决策.大多数情况下(除了通过SensorEventListener提供更新的位置服务和接近传感器),我所有服务的架构都是这样的
public class ArchetypicalService extends Service{Checker checker;public SharedPreferences prefs;public final static String PREFS = Constants.PREFS;@OverrIDepublic IBinder onBind(Intent intent) { return null;}@OverrIDepublic voID onCreate() { prefs = getSharedPreferences(PREFS, 0);}@OverrIDepublic int onStartCommand(Intent intent, int flags, int startID) { checker = new Checker(); checker.run(); return START_STICKY;}@OverrIDepublic 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应用程序中永久运行服务?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)