IntentService的使用介绍
来源:互联网 发布:linux服务器面板 编辑:程序博客网 时间:2024/05/29 17:10
IntentService简介
一,IntentService是Service的子类,比普通的Service增加了额外的功能。先看Service本身存在两个问题:
Service不会专门启动一条单独的进程,Service与它所在应用位于同一个进程中;
Service也不是专门一条新线程,因此不应该在Service中直接处理耗时的任务;
二、IntentService特征
会创建独立的worker线程来处理所有的Intent请求;
会创建独立的worker线程来处理onHandleIntent()方法实现的代码,无需处理多线程问题;
所有请求处理完成后,IntentService会自动停止,无需调用stopSelf()方法停止Service;
为Service的onBind()提供默认实现,返回null;
为Service的onStartCommand提供默认实现,将请求Intent添加到队列中;
布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.intentservice.MainActivity" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="17dp" android:text="意图服务" android:textSize="30dp" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView1" android:layout_centerHorizontal="true" android:onClick="upload" android:layout_marginTop="38dp" android:text="上传" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button1" android:layout_centerVertical="true" android:text="下载" android:onClick="download" /></RelativeLayout>
activity的代码
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } // 上传 public void upload(View v) { Intent intent=new Intent(this, FileService.class); intent.putExtra("cmd", 1); startService(intent); } public void download(View v){ Intent intent=new Intent(this, FileService.class); intent.putExtra("cmd", 2); startService(intent); }}
再来是重点 FileService的代码
public class FileService extends IntentService { public FileService() { // name是改service的一个标记,一般不用 系统内部调用会有一个映射 super("myFileService"); }// 又不要返回 就是标记的作用 @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); System.out.println("oncreate"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { // TODO Auto-generated method stub System.out.println("onstartCommant"); return super.onStartCommand(intent, flags, startId); } @Override protected void onHandleIntent(Intent intent) { // 在子线程运行,耗时操作 System.out.println("onHandleIntent"); int cmd = intent.getIntExtra("cmd", 0); switch (cmd) { case 1: System.out.println("onHandleIntent+上传"); Toast.makeText(getApplicationContext(), "上传", Toast.LENGTH_SHORT).show(); SystemClock.sleep(2000); break; case 2: System.out.println("onHandleIntent+下载"); Toast.makeText(getApplicationContext(), "下载", Toast.LENGTH_SHORT).show(); break; default: break; } } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); System.out.println("onDestory"); } // spring :strus javabena 系统调用空的构造方法}
专启一个线程来处理耗时操作,而普通service却不会。
有两点需要注意
1。toast 并有显示
2。SystemClock.sleep(2000);睡眠两秒是为了每批次的请求队列不被销毁!
0 0
- IntentService的使用介绍
- IntentService介绍及使用
- IntentService的使用
- Android:IntentService的使用
- Android IntentService 的使用
- 【安卓篇】IntentService的使用
- IntentService的使用
- IntentService 的使用
- Android IntentService的使用
- IntentService的使用
- IntentService的使用
- IntentService的使用
- IntentService的使用
- Android IntentService的使用
- IntentService的使用
- IntentService介绍
- IntentService介绍
- IntentService使用详解和实例介绍
- Android蓝牙通信开发总结
- oracle存储过程模板
- 二分查找与STL中的lower_bound(),upper_bound(),binary_search()
- 345. Reverse Vowels of a String
- leetcode 89. Gray Code
- IntentService的使用介绍
- HDFS多用户管理ACL机制other权限访问控制的理解
- 58到家入住微信钱包的技术优化
- Vmware安装OpenWrt15.05虚拟机
- 深度学习基础(八)—— 稀疏自编码器
- CSS 派生选择器
- Intel SGX Application
- OpenCV2.4.10之samples_cpp_tutorial-code_learn-----ml(SVM支持向量机一)
- Python学习路-常用函数(一)