activity 和service通信,调用service方法

package com.evt.services;

import java.io.FileDescriptor;
import java.io.PrintWriter;

import com.evt.MyApplication;

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

public class ServicesUpload extends Service {

	// 进度条最大值
	public static final int max_progress = 100;

	// 进度条进度值
	private int progress = 0;

	public int getProgress() {
		return progress;
	}

	public void setProgress(int progress) {
		this.progress = progress;
	}

	/**
	 * 模拟下载任务,每秒钟更新一次
	 */
	public void startDownLoad() {
		Log.d(MyApplication.TAG, "开始下载");
		new Thread(new Runnable() {

			@Override
			public void run() {
				while (progress < max_progress) {
					progress += 5;
					try {
						Thread.sleep(1000);
						Log.d(MyApplication.TAG, "线程睡眠一秒钟");
					} catch (InterruptedException e) {
						e.printStackTrace();
					}

				}
			}
		}).start();
	}

	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return new ServicesUploadBinder();
	}

	public class ServicesUploadBinder extends Binder {

		public ServicesUpload getServicesUpload() {
			return ServicesUpload.this;
		}
	}

	@Override
	protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
		// TODO Auto-generated method stub
		super.dump(fd, writer, args);
	}

	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
		Log.d(MyApplication.TAG, "上传服务启动");
	}

	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		Log.d(MyApplication.TAG, "上传服务销毁");
	}

}

<!-- 上传服务 -->

        <service
            android:name="com.evt.services.ServicesUpload"
            android:enabled="true"
            android:exported="false" >
            <intent-filter>
                <action android:name="com.evt.services.ServicesUpload" />
            </intent-filter>
        </service>

activity中:

private ServicesUpload servicesUpload; // 上传服务

Intent intent = new Intent("com.evt.services.ServicesUpload");
 bindService(intent, conn, Context.BIND_AUTO_CREATE);

ServiceConnection conn = new ServiceConnection() {

 @Override
 public void onServiceConnected(ComponentName arg0, IBinder arg1) {
 // TODO Auto-generated method stub
 servicesUpload = ((ServicesUpload.ServicesUploadBinder) arg1)
 .getServicesUpload();
 }

 @Override
 public void onServiceDisconnected(ComponentName name) {
 // TODO Auto-generated method stub

 }

 };

 @Override
 protected void onDestroy() {
 // TODO Auto-generated method stub
 unbindService(conn);
 super.onDestroy();
 }

调用方法:

servicesUpload.startDownLoad();
时间: 2024-07-29 18:57:56

activity 和service通信,调用service方法的相关文章

Android 单个Activity后台运行,及Activity隐藏但是不调用OnDestory方法

最近由于项目需要,需要实现一个Activity隐藏的功能,再次点击按钮进去Activity的时候不用重绘,折腾了好几天都没有解决,最后二行代码就搞定了这个问题,真是验证了Android开的一句经典话语:没有你不会的,只有你不知道的.要是知道的话,开发起来就很快.就不废话了,直接上代码,经验证,肯定是没有问题的. 1.直接上代码,在你需要隐藏Activity的时候,调用moveTaskToBack函数.  public boolean onKeyDown(int keycode, KeyEvent

H5与Activity之间的通信(调用)

1.通过H5页面的超链接尾部信息不同进行跳转(类似于URL拦截器) 例如:控件x的href="http://www.example.com/?menu_id=1", 在代码中添加webview import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.webkit.WebView; import

Service和Activity之间的通信

Service的启动方式有两种,一种是通过start方式,一种是通过bind方式,通过start方式启动服务后,启动服务的组件和服务便没有多大联系了.所以为了能和Service通信,只能通过bind的方式.下面分几步介绍下:(demo里面的Service提供一个下载的功能,然后在Activity中决定何时开始下载,以及随时查看下载进度) 第一步: 在Service类中创建一个内部类继承自Binder(onBind方法返回IBinder接口,Binder类是IBinder接口的实现类)(看到这里还

Android之Activity与Service通信

一.当Acitivity和Service处于同一个Application和进程时,通过继承Binder类来实现. 当一个Activity绑定到一个Service上时,它负责维护Service实例的引用,允许你对正在运行的Service进行一些方法调用.比如你后台有一个播放背景音乐的Service,这时就可以用这种方式来进行通信. 代码如下: /*************************Service代码****************************************/ p

Android service的开启和绑定,以及调用service的方法

界面: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout

IIS 为应用程序池提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误的解决方法

系统环境:Windows Server 2008 R2 64位, IIS 7.0 错误信息: 为应用程序池提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误.该进程ID为. 应用程序池将被自动禁用,原因是为此应用程序池提供服务的进程中出现一系列错误. 导致网站不能访问,出现 503 错误,服务不可用,Service Unavailable. 解决的方法: 1. 将应用程序池设置为 经典 Classic 模式(如果是纯.NET应用,此步骤可

TimerTask的run()方法里面如何调用service层里面的方法

在java的spring框架中,用Timer和TimerTask来实现定时任务,有时我们要在TimerTask的子类的重写run方法里,调用service层的方法. 但是不管是spring.xml配置的bean还是注解@autoware注入的bean,在执行的时候都会报空指针异常. 这其中主要的问题是TimerTask不是由spring管理的,所以你TimerTask内部的service也无法自动注入,2种解决办法,1.TimerTask交由spring管理:2.通过applicationCon

(六)Android中Service通信

一.启动Service并传递参数 传递参数时只需在startService启动的Intent中传入数据便可,接收参数时可在onStartCommand函数中通过读取第一个参数Intent的内容来实现 1.MainActivity.java package com.example.shiyanshi.serviceconnected; import android.app.Activity;import android.content.Intent;import android.os.Bundle

Android之Service通信

一.本地Service通信 LocalService /** * Created by lsj on 2015/8/29. * 这是一个LocalService */ public class StrReplaceService extends Service { private final String TAG="StrReplaceService" ; public class MyBinder extends Binder{ public StrReplaceService ge

Service通信详解

1.使用Intent进行异步通讯 在Service任务一旦完成后,就发送广播.开发者只需要实现一个BroadcastReceiver来监听响应既可. Activity.startService启动intentService,intentService完成任务后sendBroadcast()发送广播,BroadcastReceiver.startActivity()通知Activity操作结果. 在任务结束后调用sendBroadcast(new Intent(Action)); 然后在广播中通知