我需要执行这样的过程:
>启动后台服务
>使用参数更新服务(从UI-用户输入)
>活动结束后,服务应继续运行,并每分钟对http服务器执行请求.在此阶段中,我仍然需要在第二阶段中更新的参数-我将它们发送到服务器.
>服务应存储服务器的最后响应,并使用最后响应进行响应.如果有更改,请通知用户.
>最后,当活动再次开始时,服务应使用最新的服务器响应来更新UI.
我试过的
broadcastReciver-问题在于onRecive结束后,所有未声明为final的参数都会消失,而且我也没有找到一种方法来更新每分钟自动发送的Intent.
服务-使用startService()-问题是当活动结束服务(如停止和启动)时,将刷新其所有参数.再一次,我没有弄清楚在服务启动后如何更新参数.
那么如何处理这种情况呢?
谢谢.
解决方法:
听起来您需要做的就是能够“绑定”到您的服务.我在下面发布的是一个简单的模板.出于您的目的,您将需要在Service类中存储变量并创建getter,以便在您重新启动活动时可以获取最新的变量.另外-请注意,我在onResume和onPause中启动和停止了以下服务示例.毫无疑问,您将希望以不同的方式进行 *** 作.
//Activity//Bind to Service Examplepublic class ExampleActivity extends Activity implements OnClickListener {// UIprivate button binderbutton;// serviceprivate MyService myService;private Intent serviceIntent;@OverrIDepublic voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.your_layout); // binder button binderbutton = (button) findVIEwByID(R.ID.button1); binderbutton.setonClickListener(this); binderbutton.setText("start"); serviceIntent = new Intent(this, MyService.class);}private ServiceConnection serviceConnection = new ServiceConnection() { @OverrIDe public voID onServiceConnected(Componentname name, IBinder service) { myService = ((MyService.mybinder) service).getService(); } @OverrIDe public voID onServicedisconnected(Componentname name) { myService = null; }};@OverrIDeprotected voID onResume() { super.onResume(); // start the service startService(serviceIntent); // bind to the service bindService(serviceIntent, serviceConnection, Context.BIND_auto_CREATE);}@OverrIDepublic voID onClick(VIEw v) { switch (v.getID()) { case R.ID.button1: // call method within the service myService.doServiceStuff(); break; }}@OverrIDeprotected voID onPause() { super.onPause(); stopService(serviceIntent); unbindService(serviceConnection);}}
//Servicepublic class MyService extends Service {private final IBinder binder = new mybinder();@OverrIDepublic IBinder onBind(Intent arg0) { return binder;}public voID doServiceStuff() { task.execute();}// create an inner Binder classpublic class mybinder extends Binder { public MyService getService() { return MyService.this; }}AsyncTask<VoID, VoID, VoID> task = new AsyncTask<VoID, VoID, VoID>() { @OverrIDe protected VoID doInBackground(VoID... params) { Log.d("yourTag", "long running service task"); return null; } };}
总结 以上是内存溢出为你收集整理的android-更新服务在后台运行全部内容,希望文章能够帮你解决android-更新服务在后台运行所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)