Andriod Service 并在内部求和并显示 用广播机制返回求和的值

Android Service简介Android Service是Android重要的组件,在开发中会有用到和涉及。本文先给出一个最简单的Android Service例子。

(第1步)写一个类继承自Service,假设这个类的名字叫做MyAppService.java,重点是完成两个方法:Service的onCreate和onStartCommand方法。onCreate仅仅在Service第一次被startService时候初始化操作一次,随后不管再怎么startService,都不会再onCreate了。

耗时的、后台的、不需要用户交互的操作放在onStartCommand里面处理。需要强调一点,Android的Service并不是一个单独的进程、线程空间,是和Android主线程共享进程空间,这就意味,不要在onStartCommand方法里面阻塞主线程,否则将造成ANR!如果在onStartCommand里面有耗时操作,那么务必将onStartCommand里面的耗时操作代码块放到线程里面做。(注意!次说仅仅针对Service,IntentService和Service机制不同,不存在此问题,但有其自身特点,后面文章再说。)

Service的onDestroy只会被调用一次,那就是Service被stopService或者stopSelf时候。此例用Service实现一个加法


首先要继承Service

package com.example.service;

import android.app.Service;
import android.content.Intent;

import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

public class Mysevice extends Service{
	private String KEY="my_key";
	private String action="com.xh";
	
	@Override
	public void onCreate() {
		
		super.onCreate();
	}
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		int [] data= intent.getIntArrayExtra(KEY);
		int num=data[0]+data[1];
		Toast.makeText(getApplicationContext(), num+"",Toast.LENGTH_LONG).show();
		
		
		Intent in=new Intent();
		in.putExtra(KEY, num+"");
		in.setAction(action);
		this.sendBroadcast(in);
		
		
		return super.onStartCommand(intent, flags, startId);
	}
	
	@Override
	public IBinder onBind(Intent arg0) {
		// TODO Auto-generated method stub
		return null;
	}
	

}
接下来传递到anctivity中 接收

package com.example.service;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;

import android.os.Bundle;

import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


public class MainActivity extends Activity {
	EditText text1;
	EditText text2;
	TextView text;
	private String KEY="my_key";
	private String action="com.xh";
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text1=(EditText) findViewById(R.id.text1);
        text2=(EditText) findViewById(R.id.text2);
        
        text=(TextView) findViewById(R.id.text);
        
        Button  button=(Button) findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener() 
        {
			
			@Override
			public void onClick(View arg0) 
			{
				// TODO Auto-generated method stub
				 Intent intent=new Intent(MainActivity.this,Mysevice.class);
				 int []data=new int[2];
				 data[0]=Integer.parseInt(text1.getText().toString());
				 data[1]=Integer.parseInt(text2.getText().toString());
				 intent.putExtra(KEY,data);
				 MainActivity.this.startService(intent);	 
			}
		});
        
        myBroadcastReceiver receiver=new myBroadcastReceiver();
        IntentFilter intent1=new IntentFilter();
        intent1.addAction(action);
        this.registerReceiver(receiver, intent1);
    }
    
    
    
    
    
	@Override
	protected void onDestroy() {
		
		super.onDestroy();
	}
    
	
	
  private class  myBroadcastReceiver  extends BroadcastReceiver
   {

	@Override
	public void onReceive(Context context, Intent intent) {
		String num=intent.getStringExtra(KEY);
		
		text.setText(num);
		
		
	}
	   
   }
   
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值