Service实时向Activity传递数据案例

转自

http://www.cnblogs.com/linjiqin/p/3147764.html

演示一个案例,需求如下:
在Service组件中创建一个线程,该线程用来生产数值,每隔1秒数值自动加1,然后把更新后的数值在界面上实时显示。

步骤如下:
1、新建一个android项目工程,取名为demo。
2、新建一个Service类,用来实时生产数值,供界面实时显示。

package com.ljq.activity;
 
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
 
public class CountService extends Service {
 private int count = 0;
 private boolean threadDisable=false;
 
 @Override
 public void onCreate() {
  super.onCreate();
   
  new Thread(new Runnable() {
   @Override
   public void run() {
    while (!threadDisable) {
     try {
      Thread.sleep(1000);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
     count++;
     Log.v("CountService", "Count is " + count);
      
     //发送广播
     Intent intent=new Intent();
     intent.putExtra("count", count);
     intent.setAction("com.ljq.activity.CountService");
     sendBroadcast(intent);
    }
   }
  }).start();
 
 }
 
 @Override
 public IBinder onBind(Intent intent) {
  return null;
 }
 
 @Override
 public void onDestroy() {
  super.onDestroy();
  count=0;
  threadDisable = true;
  Log.v("CountService", "on destroy");
 }
 
 
}

3、新建一个Activity类,显示数据。

package com.ljq.activity;
 
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.view.View;
import android.widget.Button;
import android.widget.EditText;
 
public class MainActivity extends Activity {
 private EditText editText=null;
 private MyReceiver receiver=null;
  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
         
        editText=(EditText)findViewById(R.id.editText);
         
        //启动服务
        startService(new Intent(MainActivity.this, CountService.class));
         
  //注册广播接收器
  receiver=new MyReceiver();
  IntentFilter filter=new IntentFilter();
  filter.addAction("com.ljq.activity.CountService");
  MainActivity.this.registerReceiver(receiver,filter);
    }
     
    @Override
 protected void onDestroy() {
     //结束服务
        stopService(new Intent(MainActivity.this, CountService.class));
  super.onDestroy(); 
 }
     
    /**
     * 获取广播数据
     *
     * @author jiqinlin
     *
     */
    public class MyReceiver extends BroadcastReceiver {
     @Override
     public void onReceive(Context context, Intent intent) {
      Bundle bundle=intent.getExtras();
      int count=bundle.getInt("count");
      editText.setText(count+"");   
     }
    }
 
      
     
 
}

4、main.xml布局文件

<?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_height="fill_parent">
    <EditText android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:cursorVisible="false"
        android:editable="false"
        android:id="@+id/editText"/>
 
</LinearLayout>

5、清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.ljq.activity"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MainActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
  <service android:name =".CountService" />
 
    </application>
    <uses-sdk android:minSdkVersion="7" />
 
</manifest>
时间: 2024-10-15 16:05:37

Service实时向Activity传递数据案例的相关文章

Android Service实时向Activity传递数据

演示一个案例,需求如下:在Service组件中创建一个线程,该线程用来生产数值,每隔1秒数值自动加1,然后把更新后的数值在界面上实时显示. 步骤如下:1.新建一个android项目工程,取名为demo.2.新建一个Service类,用来实时生产数值,供界面实时显示. package com.ljq.activity; import android.app.Service; import android.content.Intent; import android.os.IBinder; impo

Android开发:向下一个activity传递数据,返回数据给上一个activity

1.向下一个activity传递数据 activity1 1 Button button=(Button) findViewById(R.id.button1); 2 button.setOnClickListener(new OnClickListener() { 3 4 @Override 5 public void onClick(View v) { 6 Intent intent=new Intent("1111111111111111111"); 7 intent.addCa

Fragment+Activity传递数据

自己经常使用的知识点,每次到要用的时候都还要再查一次才能懂得使用,终于体会到总结的必要性了. Activity传递数据给Fragment Bundle bundle_fragment=new Bundle (); String selecter=ClassList.get (position); bundle_fragment.putString (ClassTag, selecter); StudentFragment studentFragment = new StudentFragment

Android开发学习之路-回调实现Service向activity传递数据

开启服务的时候,如果我们是通过bindService来绑定服务并且要向服务传递数据,可以直接在Intent中设置bundle来达到效果,但是如果是我们需要从服务中返回一些数据到Activity中的时候,实现起来就有各种各样的方法,比如说使用回调,使用广播等等,今天说的是使用回调的方法. 新建一个工程,并编写一个服务: 1 public class MyService extends Service { 2 private boolean connecting = false; 3 private

android78 Fragment和Activity 传递数据

Activity: package com.itheima.senddata; import android.os.Bundle; import android.app.Activity; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.view.Menu; import android.view.View; import android.widget.EditT

在不同Activity传递数据(四种方式)

四种传递方法: 1.通过Intent传递数据: 2.通过静态变量传递数据: 3.通过剪切板传递数据: 4.通过全局对象传递数据: 分类介绍: 1.通过Intent传递数据: 代码如下: 布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_

Andriod:一个Activity向另一个Activity传递数据

假设现在有两个Activity:A与B,A要向B传递数据. 首先要创建两个Activity:Android:当前Activity跳转到另一个Activity A启动B: intent = new Intent(ActivityA.this,ActivityB.class); startActivity(intent); A启动B 并向B传递数据 多了一行 绑定数据 intent = new Intent(ActivityA.this,ActivityB.class); intent.putExt

android 入门-Service实时向Activity通过BroadcastReceiver传递数据

引文: http://www.cnblogs.com/linjiqin/p/3147764.html <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layou

Android两个Activity传递数据,onActivityResult获取结果时Intent为空问题

    环境:设两个Activity A 和 B,A通过调用startActivityForResult()向B传送数据,B收到数据经过处理后将数据放入Intent使用setResult(resultcode,inten)返回. 现象:在A的onActivityResult(int requestCode, int resultCode, Intent data) 中获取数据时,Intent为空,无法获取数据. 原因:在Activity B中,setResult的调用须在Activity的声明周