`

Android中的intentservice

阅读更多
在Android的应用中,往往需要在执行主界面的操作时,如果要执行耗时的操作,那么应该是另外开线程的,或者是用async或者handler,今天发现其实也可以用android中的一个Intentservice去实现。下面例子讲解下。

1 例子中是一个文本框,当用户输入内容后,模拟slepp 10秒,这个时候要是不分离线程,操作的话,用户再点界面,就会死死地停在那里,甚至是出现提示,要强行CLOSE,代码如下:
EditText input = (EditText) findViewById(R.id.txt_input);
 String strInputMsg = input.getText().toString();  
 SystemClock.sleep(30000); // 30 seconds, pretend to do work   TextView result = (TextView) findViewById(R.id.txt_result); result.setText(strInputMsg + " " + DateFormat.format("MM/dd/yy h:mmaa", System.currentTimeMillis())); 



 
2 下面是使用IntentService
   首先,我们搞一个类SimpleIntentService,继承了IntentService
public class SimpleIntentService extends IntentService {
    public static final String PARAM_IN_MSG = "imsg";
    public static final String PARAM_OUT_MSG = "omsg";

    public SimpleIntentService() {
        super("SimpleIntentService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {

        String msg = intent.getStringExtra(PARAM_IN_MSG);
        SystemClock.sleep(3000); // 30 seconds
        String resultTxt = msg + " "
            + DateFormat.format("MM/dd/yy h:mmaa", System.currentTimeMillis());
        Log.v("SimpleIntentService", "Handling msg: " + resultTxt);

        Intent broadcastIntent = new Intent();
        broadcastIntent.setAction(ResponseReceiver.ACTION_RESP);
        broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT);
        broadcastIntent.putExtra(PARAM_OUT_MSG, resultTxt);
        sendBroadcast(broadcastIntent);
    }



   我们将跟主界面线程分离的操作都写在这里的ononHandleIntent中,这里首先通过
主线程传递的Intent中,获得用户文本框中输入的内容,放到变量msg中,然后
又建立一个Intent,把结果放到这个Intent中去,然后再sendBroadcast(broadcastIntent)广播出去,丢回给主线程。

3 在主线程中,这样启动:
 
 EditText input = (EditText) findViewById(R.id.txt_input);
        String strInputMsg = input.getText().toString();

        Intent msgIntent = new Intent(this, SimpleIntentService.class);
        msgIntent.putExtra(SimpleIntentService.PARAM_IN_MSG, strInputMsg);
        startService(msgIntent);

 
4 同时,在主线程中,也要有一个receive接收
 
public class ResponseReceiver extends BroadcastReceiver {
        public static final String ACTION_RESP = "com.mamlambo.intent.action.MESSAGE_PROCESSED";
        @Override
        public void onReceive(Context context, Intent intent) {
           
            // Update UI, new "message" processed by SimpleIntentService
           TextView result = (TextView) findViewById(R.id.txt_result);
           String text = intent.getStringExtra(SimpleIntentService.PARAM_OUT_MSG);
           result.setText(text);
        }
        
    }

 

  当然,要注册这个broadcastReceiver,
 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        IntentFilter filter = new IntentFilter(ResponseReceiver.ACTION_RESP);
        filter.addCategory(Intent.CATEGORY_DEFAULT);
        receiver = new ResponseReceiver();
        registerReceiver(receiver, filter);
    }

  可以看到,intent service还是比较清晰简单的,但至于性能方面,还是要继续学习,
迟点继续研究下这玩意哦
3
3
分享到:
评论

相关推荐

    Android中IntentService的特征

    service中1需要手动开启子线程2服务开启之后会一直运行,需要手动调用stopService();或者stopSelf(); intentService是一种异步(子线程)、自动停止的服务,这个例子测试IntentService的特征

    详解Android中IntentService的使用方法

    1. 自带工作线程:IntentService内部维护了一个工作线程,当我们需要执行耗时操作时,可以直接在IntentService中进行,而不用担心会影响主线程的UI更新。 2. 单线程处理:尽管可以多次通过startService启动...

    Android—IntentService

    在Android应用开发中,IntentService的主要特点和优势包括: 1. 单线程执行:IntentService内部使用了一个工作队列,保证了所有任务按照顺序逐一执行,避免了多线程并发导致的竞态条件。 2. 自动启动与停止:当...

    IntentService

    IntentService是Android系统中一种特殊的Service,它是Service的子类,设计用于在后台执行单一的任务,然后自动停止服务,不需要手动调用stopSelf()。IntentService的使用极大地简化了后台异步任务处理,并且保证了...

    Android中的IntentService简介.pdf

    IntentService是Android操作系统中一种特殊的Service子类,它主要用于处理那些需要后台运行的单个任务,比如网络请求、数据同步等。与普通的Service相比,IntentService具有更好的线程管理和任务调度机制,使得...

    android 中的服务Service intentService例子

    总之,Android中的Service和IntentService是实现后台操作的重要手段,它们为开发者提供了在没有用户界面的情况下执行长时间任务的能力。理解并熟练使用它们,将有助于构建更加健壮和高效的应用程序。

    android IntentService 的学习例子

    2. 自动启动和停止:当IntentService中的工作队列为空时,系统会自动停止该服务,无需手动调用stopSelf()方法。 3. 非阻塞UI:由于IntentService的所有工作都在后台线程进行,因此不会影响主线程,保证了用户界面的...

    IntentService学习Demo

    在Android应用开发中,IntentService是一个非常重要的组件,它继承自Service,并且简化了后台服务的处理流程。IntentService主要用于执行单一的任务或者一系列串行任务,而不会长时间占用主线程,提高了应用的响应...

    service和Intentservice示例

    在Android应用开发中,`Service`和`IntentService`是两个关键组件,它们用于在后台执行长时间运行的任务,不依赖于用户界面。本篇将详细阐述`Service`和`IntentService`的用法以及需要注意的要点。 首先,我们来...

    Android 基于IntentService的文件下载的示例代码

    }IntentService是Android系统提供的一个特殊类型的Service,它的设计目的是处理一次性任务,特别是那些可能会花费很长时间的操作,如网络通信或大文件下载。IntentService的特性使其特别适合于在后台执行这些任务,...

    android IntentService实现原理及内部代码分享

    在Android开发中,IntentService是一个特殊的Service子类,它的设计主要目的是为了简化异步任务的执行,特别是那些一次性、不需要用户交互的任务。IntentService的主要特点在于它会自动管理线程和消息队列,使得...

    Android IntentService详解及使用实例

    Android IntentService详解 一、IntentService简介 IntentService是Service的子类,比普通的Service增加了额外的功能。先看Service本身存在两个问题:  Service不会专门启动一条单独的进程,Service与它所在...

    IntentService模拟上传图片

    在Android开发中,IntentService是一种特殊的Service,专为执行单一且异步的任务而设计,尤其适合处理耗时操作,如上传或下载数据。本案例主要关注如何使用IntentService来模拟上传图片。 IntentService的主要特点...

    Android实现后台连续静默拍照

    在Android系统中,应用需要获取相应的权限才能访问相机硬件。在Android 6.0(API级别23)及以上版本,用户在安装应用时或首次使用某些功能时会被要求授予“CAMERA”权限。因此,开发者需要在`AndroidManifest.xml`...

    深入剖析Android系统中Service和IntentService的区别

    其他生命周期方法如onCreate()、onStartCommand()等已经在IntentService中进行了默认实现,无需额外关注。 4. **单线程模型**:IntentService遵循先进先出(FIFO)的模型,确保Intent的处理顺序,避免了并发问题。 ...

    Android使用IntentService进行apk更新示例代码

    Android 中的 IntentService 是一种特殊的服务组件,它可以在 worker 线程中执行长时间运行的操作,而不需要在主线程中执行,从而避免了界面卡顿的问题。在 APK 更新示例代码中,IntentService 被用来进行 APK 的...

    IntentService简单应用

    在Android开发中,IntentService是一种特殊类型的Service,它主要用于执行后台任务,比如网络请求、数据同步等。IntentService的设计理念是让服务在一个单独的工作线程中运行,避免阻塞主线程,提供了一种有序处理...

Global site tag (gtag.js) - Google Analytics