• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android—Service与Activity的交互,androidactivity

Android—Service与Activity的交互,androidactivity

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android activity,android activity跳转,android baseactivity,android activity传值,android.app.activity等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android—Service与Activity的交互,androidactivity


   service—Android的四大组件之一。人称“后台服务”指其本身的运行并不依赖于用户可视的UI界面

   实际开发中我们经常需要service和activity之间可以相互传递数据维持程序的运行。

   先了解Service的生命周期吧。

新建一个类继Service:

package com.example.myservicedemo.service;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;

/**
 * 服务类(需要在项目清单文件中注册服务)
 * 
 * @author lenovo
 *
 */
public class MyService extends Service {
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}
    /**
     * 服务创建的时候调用
     */
	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
		System.out.println("=========onCreate======");
	}
    /**
     * 服务启动的时候调用
     */
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		// TODO Auto-generated method stub
		System.out.println("=========onStartCommand======");
		return super.onStartCommand(intent, flags, startId);
	}
    /**
     * 服务销毁的时候调用
     */
	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		System.out.println("=========onDestroy======");
		super.onDestroy();
	}
}

 新建以上类并继承Service后只会重写onBind()方法,其他方法是我手动手写,为了弄清楚Service的生命周期

 MainActivity中(设置两个按钮用来开始和停止服务):

package com.example.myservicedemo.ui;

import com.example.myservicedemo.R;
import com.example.myservicedemo.service.MyService;
import com.example.myservicedemo.service.MyService.DownLoadBinder;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Button btn_start = (Button) findViewById(R.id.btn_start);
		Button btn_stop = (Button) findViewById(R.id.btn_stop);
		btn_start.setOnClickListener(this);
		btn_stop.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		int id = v.getId();
		switch (id) {
		/*
		 * 开启服务点击事件
		 */
		case R.id.btn_start:
			Intent startIntent = new Intent(this, MyService.class);
			startService(startIntent);
			break;
		/*
		 * 停止服务点击事件
		 */
		case R.id.btn_stop:
			Intent stopIntent = new Intent(this, MyService.class);
			stopService(stopIntent);
			break;

		default:
			break;
		}
	}

}

  切记android中的服务是需要在项目清单文件中注册的(AndroidStudio可以自动,eclipse需要手动添加):

      <service android:name="服务类坐所在的包名.MyService"></service>

      此时运行程序,点击开启服务时候输出是下图:(我输出多次onStartCommand()是因为我连续点击了多次开启服务按钮)

   

  上图可以看出服务第一次开启时先是调用了onCreate()方法和onStartCommand()方法,多次点击开始服务时只调用了onStartCommand()方法

   so:

   onCreate()方法是服务创建的时候调用的~

   onStartCommand()方法在每次启动服务的时候都会调用~

   onDestory()方法在停止服务时候会调用~

   点击停止服务后,输出如图:

 

 启动服务还有一种方式是bindService();

 此时的MyService类要做改变:

package com.example.myservicedemo.service;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;

/**
 * 服务类(需要在项目清单文件中注册服务)
 * 
 * @author lenovo
 *
 */
public class MyService extends Service {
    private DownLoadBinder downLoadBinder=new DownLoadBinder();
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		System.out.println("=====onBind=====");
		return downLoadBinder;
	}
	/**
	 * 内部类继承Binder
	 * @author lenovo
	 *
	 */
	public class DownLoadBinder extends Binder{
		public void startDownLoad(){
			System.out.println("=====startDownLoad()=====");
		}
		public void getProgress(){
			System.out.println("=====getProgress()=====");
		}
	}
    /**
     * 服务创建的时候调用
     */
	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
		System.out.println("=========onCreate======");
	}
    /**
     * 服务启动的时候调用
     */
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		// TODO Auto-generated method stub
		System.out.println("=========onStartCommand======");
		return super.onStartCommand(intent, flags, startId);
	}
    /**
     * 服务销毁的时候调用
     */
	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		System.out.println("=========onDestroy======");
		super.onDestroy();
	}
}

  以上的代码和第一次相比,一是多了一个内部类DownLoadBinder继承IBinder并且声明了两个方法,二是将onBind方法的返回值改为了DownLoadBinder类型的变量

     activity bindService方法启动服务时候一般是需要传递数据的,核心就在onBind()方法中,往下看

 MainActivity中加两个按钮:绑定服务和取消绑定服务

  

package com.example.myservicedemo.ui;

import com.example.myservicedemo.R;
import com.example.myservicedemo.service.MyService;
import com.example.myservicedemo.service.MyService.DownLoadBinder;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {
    private MyService.DownLoadBinder downLoadBinder;
    private MyService myService;  //我们自己的service  
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Button btn_start = (Button) findViewById(R.id.btn_start);
		Button btn_stop = (Button) findViewById(R.id.btn_stop);
		Button btn_bind = (Button) findViewById(R.id.btn_bind);
		Button btn_unbind = (Button) findViewById(R.id.btn_unbind);
		btn_start.setOnClickListener(this);
		btn_stop.setOnClickListener(this);
		btn_bind.setOnClickListener(this);
		btn_unbind.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		int id = v.getId();
		switch (id) {
		/*
		 * 开启服务点击事件
		 */
		case R.id.btn_start:
			Intent startIntent = new Intent(this, MyService.class);
			startService(startIntent);
			break;
		/*
		 * 停止服务点击事件
		 */
		case R.id.btn_stop:
			Intent stopIntent = new Intent(this, MyService.class);
			stopService(stopIntent);
			break;
		/*
		 * 绑定服务点击事件
		 */
		case R.id.btn_bind:
			Intent bindIntent = new Intent(this, MyService.class);
			bindService(bindIntent, connection, BIND_AUTO_CREATE)



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 滑动关闭activity,滑动activity
  • 切换横竖屏的时候Activity的生命周期变化情况,activity生命周期
  • Android—Service与Activity的交互,androidactivity
  • Android中Activity运行时屏幕方向与显示方式详解,androidactivity
  • Android生命周期,activity生命周期
  • Android 面试题--Activity,android--activity
  • Android 四大组件之Activity(续2),androidactivity
  • Android动态加载Activity原理
  • [Android] Activity间切换,传递数据,androidactivity
  • Android Activity的生命周期简单总结

相关文章

  • 2017-05-26build.gradle文件的注释,build.gradle注释
  • 2017-05-26Android进阶--Acticivity的启动模式,acticvity启动模式
  • 2017-05-26一款面试复习应用源码,面试复习源码
  • 2017-05-26Remote Displayer for Android V1.0,displayerandroid
  • 2017-05-26Android环境的搭建,Android环境搭建
  • 2017-05-26Application,applicationform
  • 2017-05-26【新建项目&amp;使用viewPager】实现一个Android电子书阅读APP,新建项目定义
  • 2017-05-26自动完成文本框(AutoCompleteTextView与MultiAutoCompleteTextView)关联适配器,文本框autocomplete
  • 2017-05-26在Kotlin编写RecyclerView适配器(KAD 16),kotlinrecyclerview
  • 2017-05-26回顾自定义view三个构造函数,回顾view构造函数

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 我的android学习经历,android学习经历
    • 安卓DJ113舞曲网应用客户端 项目源码(服务器+客户端),安卓dj113
    • ELK部署参考文档
    • Kotlin中变量不同于Java: var 对val(KAD 02),kotlinkad
    • 重写dispatchKeyEvent方法 按返回键back 执行两次的解决办法,dispatchkeyevent
    • android自定义控件(二),简易的数值输入器
    • 几个常用的adb命令,常用adb命令
    • 安卓6.0(棉花糖)新特性汇总,安卓6.0
    • 说明一下JNI 与AIDL,说明JNIAIDL
    • 《Android Studio实用指南》12.18 文本搜索工具

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有