Android笔记二十九.Service组件入门(三).使用IntentService
package com.example.android_intentservice; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; public class ServiceAndIntentService extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } //1.启动普通Service按钮方法 public void startService(View source) { Intent intent = new Intent(this,MyService.class); //创建需要启动的service的Intent startService(intent); //启动Intent指定的Service } //2.启动IntentService按钮方法 public void startIntentService(View source) { Intent intent = new Intent(this,MyIntentService.class); startService(intent); } }
...... <Button android:onClick="startService" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="启动普通Service" /> <Button android:onClick="startIntentService" android:layout_width="186dp" android:layout_height="wrap_content" android:text="启动IntentService" />
package com.example.android_intentservice; import android.app.Service; import android.content.Intent; import android.os.IBinder; public class MyService extends Service { @Override public IBinder onBind(Intent intent) { return null; } //当启动Service,调用该方法执行相应代码 @Override public int onStartCommand(Intent intent, int flags, int startId) { long endTime = System.currentTimeMillis()+20*1000; System.out.println("onStart"); while(System.currentTimeMillis()<endTime) { synchronized(this) { try { wait(endTime-System.currentTimeMillis()); }catch(Exception e) { } } } System.out.println("---普通Service耗时任务执行完成---"); return START_STICKY; } } (4)\src\com\example\android_intentservice\MyIntentService.java 实现:实现一个IntentService执行耗时任务(20s),观察是否导致ANR异常 package com.example.android_intentservice; import android.app.IntentService; import android.content.Intent; public class MyIntentService extends IntentService { public MyIntentService() { super("MyIntentService"); } //IntentService会使用单独的线程来执行方法的代码 @Override protected void onHandleIntent(Intent intent) { //该方法内可以执行任何耗时任务,比如下载文件等,此处只是让线程暂停20s long endTime = System.currentTimeMillis()+20*1000; System.out.println("onStart"); while(System.currentTimeMillis()<endTime) { synchronized(this) { try { wait(endTime-System.currentTimeMillis()); }catch(Exception e) { } } } System.out.println("---IntentService耗时任务执行完成---"); } }
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity .......... </activity> <!--配置service--> <service android:name=".MyService"/> <service android:name=".MyIntentService"/> </application>
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。