Android service 之启动服务
来源:互联网 发布:淘宝手机店铺装修图 编辑:程序博客网 时间:2024/06/05 19:33
Service是一个可以在后台执行长时间运行操作而不提供用户界面的应用组件。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。此外,组件可以绑定到服务,以与之进行交互,甚至是执行进程间的通信(IPC)。
服务分为 启动服务(执行单一操作,不会将结果返回给调用方。通过startService()启动服务)
和绑定服务(允许组件与服务进行交互、发送请求、获取结果,通过bindService()绑定到服务)
服务可以同时以这两种方式运行,只要实现一组回调方法:onStartCommand()(允许组件启动服务)和 onBind()(允许绑定服务)。
使用详情介绍请看:官网
启动服务:
public class MainActivity extends AppCompatActivity { private Intent intent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intent = new Intent(this,MyService2Activity.class); } public void start(View view){ startService(intent); } public void stop(View view){ stopService(intent);//会停止服务但是子线程还在继续 }}
第一种:先建一个类继承Service, 重写里面的方法onBind(),onCreate(),onStartCommand(),onDestroy(),
在清单文件中配置Service,
用Intent( startService(intent) )启动服务,停止服务用stopService(intent)或stopSelf()。
在onStartCommand()方法中写服务启动时需要执行的方法,耗时的代码还是需要另开一个子线程,stopSelf()当第一个线程执行完毕时停止服务,stopSelf(startId)所有线程执行完毕时才停止。
public class MyService1Activity extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i("test","onStartCommand"); new mythread(startId).start(); return super.onStartCommand(intent, flags, startId); } @Override public void onCreate() { Log.i("test","onCreate"); super.onCreate(); } @Override public void onDestroy() { Log.i("test","onDestroy"); super.onDestroy(); } class mythread extends Thread{ private int staetid; public mythread(int staetid ){ this.staetid=staetid; } @Override public void run() { super.run(); for (int i=0;i<20;i++){ Log.i("test",i+""); SystemClock.sleep(100); }// stopSelf();//当第一个线程执行完毕,则会停止服务但是子线程还在继续// stopSelf(staetid); //所有的线程都执行完毕,才停止服务 } }}
在清单文件中配置Service
<service android:name=".MyService1Activity" android:exported="true"> </service> </application>
第二种:先建一个类继承IntentService,
重写onHandleIntent()( 类似于Service中的onStartCommand()方法 ),注意写构造方法,
在清单文件中配置Service,
在onHandleIntent()写所需执行的代码。
public class MyService2Activity extends IntentService{ public MyService2Activity(){ super(""); } @Override protected void onHandleIntent(Intent intent) { for (int i=0;i<20;i++){ Log.i("test2",i+""); SystemClock.sleep(100); } }}
在清单文件中配置Service
<service android:name=".MyService2Activity" android:exported="true"> </service> </application>
第一种与第二种的区别:onHandleIntent()有异步任务类可以执行耗时的操作,耗时操作执行是有序的,第一个执行完毕才执行第二个,而onStartCommand()需要开辟子线程,执行的子线程是无序的,同一执行。
- Android service 之启动服务
- android之手机开机启动Service服务
- Android Service 之启动服务( startService() )
- Service之启动服务
- Android Service---启动服务
- Android Service---启动服务
- Android: Service(启动服务)
- Android 02 Started Service--之被启动的服务
- Android服务之Service
- Android服务之Service
- Android服务之Service
- Android之Service服务
- Android服务之Service
- android之service服务
- Android服务之Service
- Android服务之Service
- Android之服务Service
- 48.android服务service-启动远程服务
- ListView控件点击无响应
- BigEndian&LittleEndian
- test
- 优先队列的优先级设置法
- grep进行多模式过滤
- Android service 之启动服务
- android sercice之绑定服务
- DrawerLayout,NavigationView 和 ActionBar的使用
- 读《成功的背后(给所有的IT人)》有感
- java初学者--实现二进制加法
- Python 与游戏测试 (小工具篇)
- android 之内容提供者与访问者 --- 练习
- android 获取联系人---练习
- 开关电源的调试技巧