• Android中Services之异步IntentService


    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;
                }
    
            }
        };
  • 相关阅读:
    IntelliJ IDEA + Maven + Tomcat 本地开发、部署、调试。
    IntelliJ IDEA 修改IDE字体、代码字体。
    IntelliJ IDEA 自动导入包的问题
    jersey中的 404 Not Found 错误。
    IntelliJ IDEA 创建maven项目一次后,然后删除,再次保存到此目录下,提供此目录已经被占用的问题。
    修饰符(字符篇)
    [讨论] 2015-8-13日 主题:关于指针和堆栈
    HDFS异构存储
    HDFS异构存储
    HDFS副本放置策略
  • 原文地址:https://www.cnblogs.com/zhangs1986/p/3602154.html
Copyright © 2020-2023  润新知