重拾Service

前段时间看了一些大神写的博客,看了这些大神如何从菜鸟一步一步进阶到如今的实力,我是相当的羡慕,很多大神还列出了每个阶段应该掌握的知识点,我对比了一下我自己,我觉得我最近是太浮躁了,每个新知识点都想要第一时间去了解,以至于很多很基础的东西都不记得怎么去使用了,最近的在做下载更新这块,我才想起,我的service已经忘了怎么使用了,这下,我才感觉自己基础太弱了。然后又花了一点儿时间把service重新了解了一下,在此做下总结,希望自己能够把基础打扎实,二是方便自己以后查看。

第一步:创建一个类继承service,
1、如果需要activity和service做交互的话,我们采用 bindService()开启服务;可重写onCreate()、onBind()、onUnbind()、onDestroy();

2、如果不需要做交互,就比如音乐后台播放,或者下载类,我们就可以采用StartService()方法开启服务,这里就需要重写onCreate()、onStartCommond()、onDestroy();

第二步:在activity里面调用服务,由第一步可知,服务的调用有两种方法,
1、一种简单的,就是startService(intent),在需要停止服务的地方调用stopService(intent)即可,这种完全有种“放养式”,只要不调用stopService(intent),就不会停下来,即时程序退出去了也不会停,相对来说控制这种比较简单
2、第二种就是绑定服务,这个在组件调用服务通过  bindService(intent,serviceConnection, BIND_AUTO_CREATE);
不需要服务的时候调用  
unbindService(serviceConnection);
这里特别说明一下这个serviceConntetion

这里写图片描述

新建了一个ServiceConnection实例,重写里面的两个方法,第一个方法是通过里面的service获取我们需要的东西,这个在重写Service里面写一个内部类继承Binder,在里面可以写上我们需要和activity交互的方法和数据,通过onBind()返回回来,我们就可以通过这个获取我们从service得到的数据。第二个方法一般不会被调用,当Service服务被异外销毁时,例如内存的资源不足时这个方法才被自动调用。

执行顺序
当我们采用startService(intent)时,调用顺序onCreate()、onStartCommand()、我们直接退出程序,也不会有什么变化,再次进入程序调用服务时只会执行onStartCommand()而不会执行onCreate()方法,只有调用了stopService()才会执行onDestroy()方法。
如果我们采用bindService()方法时,调用顺序为onCreate()、onBind(),进而会执行onServiceConnected()方法、退出程序或者执行unbindService(serviceConnection),则会执行onUnbind()、onDestroy()。这个过程中,我们实现了binder的通信机制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CGI(Common Gateway Interface)是一种标准,用于在Web服务器上运行外部程序。 CGI程序可以与Web服务器进行通信,从而让Web服务器获取外部程序生成的数据,并将其返回给客户端浏览器。在这个过程中,CGI程序可以读写文件、处理表单数据、查询数据库等。 文件上传是Web应用程序中非常常见的一种功能。上传文件的过程涉及到客户端浏览器将文件数据发送到Web服务器,Web服务器将文件保存到指定的目录中,并将文件相关的信息存储到数据库中。CGI程序可以处理上传文件的请求,并实现文件的保存和数据库的更新等操作。 cgicc是一个C++库,用于处理CGI程序中的表单数据。它提供了一组简单易用的API,可以方便地读取和处理表单数据,并且支持文件上传等功能。使用cgicc可以极大地简化CGI程序的开发。 下面是一个使用cgicc处理文件上传的示例: ```cpp #include <iostream> #include <fstream> #include <cgicc/Cgicc.h> #include <cgicc/HTTPHTMLHeader.h> #include <cgicc/HTMLClasses.h> using namespace std; using namespace cgicc; int main() { Cgicc cgi; const_file_iterator file = cgi.getFile("file"); if(file != cgi.getFiles().end()) { string filename = file->getName(); string filepath = "/var/www/upload/" + filename; ofstream ofs(filepath.c_str(), ios::out | ios::binary); file->writeToStream(ofs); ofs.close(); cout << HTTPHTMLHeader() << endl; cout << HTMLDoctype(HTMLDoctype::eStrict) << endl; cout << html().set("lang", "en").set("dir", "ltr") << endl; cout << head() << title("File Upload Result") << head() << endl; cout << body() << h1("File Upload Result") << endl; cout << p("File " + filename + " uploaded successfully!") << endl; cout << body() << html(); } else { cout << HTTPHTMLHeader() << endl; cout << HTMLDoctype(HTMLDoctype::eStrict) << endl; cout << html().set("lang", "en").set("dir", "ltr") << endl; cout << head() << title("File Upload Result") << head() << endl; cout << body() << h1("File Upload Result") << endl; cout << p("No file uploaded!") << endl; cout << body() << html(); } return 0; } ``` 在这个示例中,我们使用cgicc库处理表单数据,并通过getFile函数获取上传的文件。如果getFile返回的迭代器不等于getFiles返回的迭代器末尾,说明有文件上传。我们可以通过getName获取上传文件的名称,并指定文件保存的路径。然后,我们使用writeToStream将文件写入到指定的文件路径中。 最后,我们输出一个HTML响应,显示文件上传的结果。如果有文件上传成功,输出“File uploaded successfully!”,否则输出“No file uploaded!”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值