zoukankan      html  css  js  c++  java
  • Android中Services之异步IntentService(二)

    转载地址:http://www.cnblogs.com/zhangs1986/p/3602154.html

    IntentService:异步处理服务,新开一个线程:handlerThread在线程中发消息,然后接受处理完成后,会清理线程,并且关掉服务。

    IntentService有以下特点:

    (1)  它创建了一个独立的工作线程来处理所有的通过onStartCommand()传递给服务的intents。

    (2)  创建了一个工作队列,来逐个发送intent给onHandleIntent()。

    (3)  不需要主动调用stopSelft()来结束服务。因为,在所有的intent被处理完后,系统会自动关闭服务。

    (4)  默认实现的onBind()返回null

    (5)  默认实现的onStartCommand()的目的是将intent插入到工作队列中

     继承IntentService的类至少要实现两个函数:构造函数和onHandleIntent()函数。要覆盖IntentService的其它函数时,注意要通过super调用父类的对应的函数。

    界面设置两按钮:

    复制代码
     <Button
            android:id="@+id/btnStartIntentService"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="开始下载" >
        </Button>
    
        <Button
            android:id="@+id/btnStopIntentService"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="结束下载" >
        </Button>
    复制代码

    声明IntentServiceSub继承IntentService

    复制代码
    public class IntentServiceSub extends IntentService {
    
        private static final String TAG = "IntentServiceSub";
    
        public IntentServiceSub() {
            super("IntentServiceSub");
            Log.i(TAG, "=>IntentServiceSub");
        }
    
        /* (non-Javadoc)
         * @see android.app.IntentService#onCreate()
         */
        @Override
        public void onCreate() {
            Log.i(TAG, "=>onCreate");
            super.onCreate();
        }
    
        /* (non-Javadoc)
         * @see android.app.IntentService#onDestroy()
         */
        @Override
        public void onDestroy() {
            Log.i(TAG, "=>onDestroy");
            super.onDestroy();
        }
        
        @Override
        protected void onHandleIntent(Intent arg0) {
            Log.i(TAG, "IntentService 线程:"+Thread.currentThread.getId());
    Thread.sleep(2000);
    }
    复制代码

    页面按钮事件

    复制代码
            btnStartIntentService = (Button) this.findViewById(R.id.btnStartIntentService);
            btnStopIntentService = (Button) this.findViewById(R.id.btnStopIntentService);
    
    private OnClickListener listener = new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                
                case R.id.btnStartIntentService:
                    Log.i(TAG, "主线程ID:"+Thread.currentThread.getId());
                    if (mServiceIntent == null)
                        mServiceIntent = new Intent(AndroidServiceActivity.this,IntentServiceSub.class);
                    startService(mServiceIntent);
                    break;
                case R.id.btnStopIntentService:
                    Log.i(TAG, "btnStopIntentService");
                    if (mServiceIntent != null) {
                        stopService(mServiceIntent);
                        mServiceIntent = null;
                    }
                    break;
                }
    
            }
        };
    复制代码
  • 相关阅读:
    Loki 初体验
    柠檬研究院及第一期活动预告
    Apache SkyWalking 为.NET Core带来开箱即用的分布式追踪和应用性能监控
    聊聊AspectCore动态代理中的拦截器
    使用AspectCore动态代理
    AspectCore中的IoC容器和依赖注入
    AspectCore.Extension.Reflection : .NET Core反射扩展库
    Asp.Net Core轻量级Aop解决方案:AspectCore
    [精品书单] C#/.NET 学习之路——从入门到放弃
    创建vue项目
  • 原文地址:https://www.cnblogs.com/songyao/p/4142057.html
Copyright © 2011-2022 走看看