服务Service---并与活动、接收器之间的通信
来源:互联网 发布:健身教程软件 编辑:程序博客网 时间:2024/06/11 02:42
学习《Android第一行代码》笔记与实践。
配置文件声明:
<application 。。。 <activity android:name=".MainActivity"> 。。。 </activity> <service android:name=".MyService"/> <service android:name=".MyIntentService"/> <service android:name=".LongRunningService"/> <receiver android:name=".AlarmReceiver"/> </application>
1.Service
/** * 1.服务需要在配置文件中声明。 * 2.启动服务使用Intent。 * 3.服务自行停止,只需要在MyService任何一个位置调用stopSelf()方法就行了。 * 4.任何一个服务在整个应用程序范围内都是通用的, * 及MyService可以和任何一个活动进行绑定, * 而且在绑定完成后它们都可以获取到相同的DownloadBinder实例。 * 5.当一个服务既被启动又被绑定后,需要同时调用stopService()和unbindService()方法, * onDestroy()才会执行。 */public class MyService extends Service{ private DownloadBinder downloadBinder = new DownloadBinder(); @Nullable @Override public IBinder onBind(Intent intent) { return downloadBinder; } /** * 服务第一次创建的时候调用 */ @Override public void onCreate() { super.onCreate(); ToastUtil.showMessage("服务创建"); /*//创建一个前台服务 Intent intent = new Intent(this, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0); NotificationCompat.Builder builder = new NotificationCompat.Builder(this) //设置小图标 .setSmallIcon(R.mipmap.ic_launcher) //设置通知标题 .setContentTitle("最简单的Notification") //设置点击后事件 .setContentIntent(pendingIntent) //设置通知内容 .setContentText("只有小图标、标题、内容"); Notification notification = builder.build(); startForeground(1, notification);*/ } /** * 每次服务启动的时候都会调用 * @param intent * @param flags * @param startId * @return */ @Override public int onStartCommand(Intent intent,int flags, int startId) { ToastUtil.showMessage("服务启动"); /*new Thread(new Runnable() { @Override public void run() { //让服务执行完毕后自动停止 stopSelf(); } });*/ return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); ToastUtil.showMessage("服务销毁"); } class DownloadBinder extends Binder{ public void startDownload(){ ToastUtil.showMessage("开始下载"); } public int getProgress(){ ToastUtil.showMessage("下载进度"); return 0; } }}
2.IntentService
public class MyIntentService extends IntentService{ public MyIntentService() { super("MyIntentService");//调用父类的有参构造函数 } /** * 处理一些具体的逻辑,运行在子线程中 * @param intent */ @Override protected void onHandleIntent(@Nullable Intent intent) { //显示当前线程的id ToastUtil.showMessage("MyIntentService当前线程的id:" + Thread.currentThread().getId()); } @Override public void onDestroy() { super.onDestroy(); ToastUtil.showMessage("MyIntentService销毁"); }}
3.Service与BroadcastReceiver
LongRunningService :
/** * 一旦启动LongRunningService,就会在onStartCommand方法里设定一个定时任务, * 3秒后AlarmReceiver的onReceive方法就会得到执行, * 然后又在里面再次启动LongRunningService,这样就形成了一个永久的循环, * 保证LongRunningService可以每隔3秒就会启动一次。 */public class LongRunningService extends Service{ @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d("LongRunningService","onStartCommand"); new Thread(new Runnable() { @Override public void run() { Log.d("LongRunningService",new Date().toString()); } }).start(); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); int date = 3 * 1000;//3秒 long triggerAtTime = SystemClock.elapsedRealtime() + date; Intent intent1 = new Intent(this,AlarmReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent1, 0); alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pendingIntent); return super.onStartCommand(intent, flags, startId); }}
AlarmReceiver :
public class AlarmReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Log.d("AlarmReceiver","onReceive"); Intent intent1 = new Intent(context, LongRunningService.class); context.startService(intent1); }}
4.活动:
布局:添加几个按钮。
public class MainActivity extends AppCompatActivity { @BindView(R.id.btn_start_service) Button btnStartService; @BindView(R.id.btn_stop_service) Button btnStopService; @BindView(R.id.btn_bind_service) Button btnBindService; @BindView(R.id.btn_unbind_service) Button btnUnbindService; @BindView(R.id.btn_start_intent_service) Button btnStartIntentService; @BindView(R.id.btn_start_long_running_service) Button btnStartLongRunningService; private MyService.DownloadBinder downloadBinder; private ServiceConnection connection = new ServiceConnection() { //服务成功绑定的时候调用 @Override public void onServiceConnected(ComponentName name, IBinder service) { downloadBinder = (MyService.DownloadBinder) service; downloadBinder.startDownload(); downloadBinder.getProgress(); } //服务解绑的时候调用 @Override public void onServiceDisconnected(ComponentName name) { } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); } @OnClick({R.id.btn_start_service, R.id.btn_stop_service, R.id.btn_bind_service, R.id.btn_unbind_service, R.id.btn_start_intent_service, R.id.btn_start_long_running_service}) public void onViewClicked(View view) { Intent intent = null; switch (view.getId()) { case R.id.btn_start_service://启动服务 intent = new Intent(MainActivity.this, MyService.class); startService(intent); break; case R.id.btn_stop_service://停止服务 intent = new Intent(MainActivity.this, MyService.class); stopService(intent); break; case R.id.btn_bind_service://绑定服务 intent = new Intent(MainActivity.this, MyService.class); bindService(intent, connection, BIND_AUTO_CREATE); //BIND_AUTO_CREATE表示在活动和服务进行绑定后自动创建服务, //这会使得MyService的onCreate方法得到执行,但onStartCommand方法不会执行。 break; case R.id.btn_unbind_service://解绑服务 unbindService(connection); break; case R.id.btn_start_intent_service: ToastUtil.showMessage("MainActivity当前线程的id:" + Thread.currentThread().getId()); intent = new Intent(MainActivity.this, MyIntentService.class); startService(intent); break; case R.id.btn_start_long_running_service: intent = new Intent(MainActivity.this, LongRunningService.class); startService(intent); break; } }}
阅读全文
0 0
- 服务Service---并与活动、接收器之间的通信
- Android活动与服务之间的通信
- Android- 活动(Activity), 服务(Service), 广播(Broadcast), 广播接收器(BroadcastReceiver)
- Android- 活动(Activity), 服务(Service), 广播(Broadcast), 广播接收器(BroadcastReceiver)
- Android- 活动(Activity), 服务(Service), 广播(Broadcast), 广播接收器(BroadcastReceiver)
- 活动(Activity), 服务(Service), 广播(Broadcast), 广播接收器(BroadcastReceiver)
- Android- 活动(Activity), 服务(Service), 广播(Broadcast), 广播接收器(BroadcastReceiver)
- 活动和服务之间的通信 第一行代码
- android activity与service之间的通信
- Activity与service 之间的通信
- Activity 与 Service 之间的通信
- activity 与 service 之间的通信
- activity 与 service 之间的通信
- activity 与 service 之间的通信
- activity 与 service 之间的通信
- 活动与服务间通信
- Android学习之碎片与活动之间的通信
- Fragment的碎片与活动之间进行通信
- Python---项目3-破解使用crypt方法加密(已加salt参数)的登录密码
- YOLOv2源码分析(五)
- Kotlin
- Android Studio 构建脚本-gradle详解
- Term(MAC终端)配置及相关优化设置
- 服务Service---并与活动、接收器之间的通信
- 在Fragment的延时操作中如何更新UI
- java线程同步
- JS生成某个范围的随机数【四种情况详解】
- webpack基础配置入门
- Genymotion安装
- JSON数据解析及gson.jar包
- TensorFlow命名空间和TensorBoard图节点
- 水仙花的数量