service
service
火文乐武 发表于2年前
service
  • 发表于 2年前
  • 阅读 16
  • 收藏 0
  • 点赞 2
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: service实例、网络下载图片

service有四个方法:onCreate()  onStartComend()  onBind()  onDdestory()

1、当使用onCreate()和onStartComend()方法时,每点击一次事件,就会执行一次onStartComend()

而使用onBind()只调用一次

2、使用时需要在清单列表中注册 <service android.name=" 包名"></service>

案例:运用service从网络下载图片到手机SD卡

1.在activatymain.xml中添加点击按钮,

<Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="show"
        android:text="@string/receive" />

2、在MainActivity.java中设置监听,实现跳转

public void show(View v){
		Intent intent=new Intent(this,SecondActivity.class);
		startService(intent);
	}

3、在跳转后的类中新建一个线程下载内容,下载后service类关闭

public int onStartCommand(Intent intent, int flags, int startId) {
		
		new Thread(){
			public void run() {
				byte[] data=HttpUtils.getbyteByUrl(url, "get");
				flag=SDCardUtils.saveData2SDCard(data,"zz1044","haha.png");
			};
		}.start();
		SystemClock.sleep(3000);
		stopSelf();
		Toast.makeText(this, flag+"", Toast.LENGTH_SHORT).show();
		return super.onStartCommand(intent, flags, startId);
	}

 

4、在清单列表中添加注册

 <service android:name="com.example.day2302.SecondActivity" >
        </service>

5、使用SD卡工具类

public class SDCardUtils {

	/**
	 * 判断sd卡是否成功挂载
	 * 
	 * @return
	 */
	public static boolean isMounted() {
		boolean flag = false;

		flag = Environment.MEDIA_MOUNTED.equals(Environment
				.getExternalStorageState());

		return flag;
	}

	/**
	 * 获取SD卡的根路径
	 * 
	 * @return
	 */
	public static String getSDCardPath() {
		String path = null;

		if (isMounted()) {
			path = Environment.getExternalStorageDirectory().getAbsolutePath();
		}
		return path;
	}

	public static boolean saveData2SDCard(byte[] data, String dir,
			String fileName) {
		boolean flag = false;

		if (isMounted()) {
			String path = getSDCardPath() + File.separator + dir;

			File f = new File(path);

			if (!f.exists()) {
				f.mkdirs();
			}

			BufferedOutputStream bos = null;

			try {
				bos = new BufferedOutputStream(new FileOutputStream(new File(f,
						fileName)));
				bos.write(data, 0, data.length);
				bos.flush();
				flag = true;
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				try {
					if (bos != null) {
						bos.close();
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

		return flag;
	}
}

6、使用下载工具类
 

public class HttpUtils {

	public static InputStream getStreamByUrl(String url) {

		InputStream is = null;
		// 构建HttpClient对象
		HttpClient client = new DefaultHttpClient();

		// 构建HttpGet请求对象
		HttpGet get = new HttpGet(url);

		try {

			// 通过HttpClient对象的execute(HttpGet)方法得到一个HttpResponse对象
			HttpResponse response = client.execute(get);

			// 判断是否成功获取数据
			if (response.getStatusLine().getStatusCode() == 200) {

				// 通过HttpResponse对象的getEntity()方法得到一个HttpEntity对象
				HttpEntity entity = response.getEntity();

				// 通过HttpEntity对象的getContent()方法获取一个流对象
				is = entity.getContent();

			}
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		return is;
	}

	public static byte[] getBytesByUrl(String url, String method) {

		byte[] data = null;
		// 构建HttpClient对象
		HttpClient client = new DefaultHttpClient();

		HttpUriRequest get = null;
		// 构建HttpGet请求对象
		if ("get".equalsIgnoreCase(method)) {
			get = new HttpGet(url);
		} else if ("post".equalsIgnoreCase(method)) {
			get = new HttpPost(url);
		}

		try {

			// 通过HttpClient对象的execute(HttpGet)方法得到一个HttpResponse对象
			HttpResponse response = client.execute(get);

			// 判断是否成功获取数据
			if (response.getStatusLine().getStatusCode() == 200) {

				// 通过HttpResponse对象的getEntity()方法得到一个HttpEntity对象
				HttpEntity entity = response.getEntity();

				// 通过HttpEntity对象的getContent()方法获取一个流对象
				data = EntityUtils.toByteArray(entity);

			}
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		return data;
	}
}

 

共有 人打赏支持
粉丝 8
博文 32
码字总数 17183
×
火文乐武
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: