博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Service实时向Activity传递数据案例
阅读量:5123 次
发布时间:2019-06-13

本文共 2895 字,大约阅读时间需要 9 分钟。

转自

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布局文件

    
 

5、清单文件

    
        
            
                
                
            
        
  
     
    
 

转载于:https://www.cnblogs.com/zhangminghan/p/6236229.html

你可能感兴趣的文章
vs code 的便捷使用
查看>>
用户空间与内核空间,进程上下文与中断上下文[总结]
查看>>
JAVA开发环境搭建
查看>>
Visual Studio基于CMake配置opencv1.0.0、opencv2.2
查看>>
SDN第四次作业
查看>>
django迁移数据库错误
查看>>
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
字符串处理
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>
罗马数字与阿拉伯数字转换
查看>>
Eclipse 反编译之 JadClipse
查看>>
Python入门-函数
查看>>
距离公式汇总以及Python实现
查看>>
Linux内核态、用户态简介与IntelCPU特权级别--Ring0-3
查看>>
第23月第24天 git命令 .git-credentials git rm --cached git stash clear
查看>>
java SE :标准输入/输出
查看>>
[ JAVA编程 ] double类型计算精度丢失问题及解决方法
查看>>
好玩的-记最近玩的几个经典ipad ios游戏
查看>>
PyQt5--EventSender
查看>>