仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1657|回复: 19
打印 上一主题 下一主题

[学习教程] IOS编程之关于Android Service组件在多线程使用的了解仓酷云

[复制链接]
逍遥一派 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:43:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
最近一直都在学习有关ios(苹果系统)的知识,而学习ios的最好方法就是研究iPhone和ipad。因为iPhone和iPad的应用程序都是用Objective-C语言来开发的,所以在接触ios之前,我必须有一定的Objective-C基础。AndroidService组件在GoogleAndroidSDK官网上的界说是如许的:
AServiceisanapplicationcomponentrepresentingeitheranapplicationsdesiretoperformalonger-runningoperationwhilenotinteractingwiththeuserortosupplyfunctionalityforotherapplicationstouse.EachserviceclassmusthaveacorrespondingdeclarationinitspackagesAndroidManifest.xml.ServicescanbestartedwithContext.startService()andContext.bindService().
Notethatservices,likeotherapplicationobjects,runinthemainthreadoftheirhostingprocess.Thismeansthat,ifyourserviceisgoingtodoanyCPUintensive(suchasMP3playback)orblocking(suchasnetworking)operations,itshouldspawnitsownthreadinwhichtodothatwork.MoreinformationonthiscanbefoundinProcessesandThreads.TheIntentServiceclassisavailableasastandardimplementationofServicethathasitsownthreadwhereitschedulesitsworktobedone.
在中文中,他的表述是服务。Android付与了Service比处于不举动形态的举动更高的优先级,如许,在体系哀求资本的时分,他们被停止的大概行更小。现实上,假如运转时过早的停止一个已启动的服务,那末只需有充足的资本可用,则运转时就会从头启动它。在极度情形中,服务的停止将会明显的影响用户体验,从而招致软件计划上的UI与UE的互动缺掉,在这些情形中,能够把服务的优先级提拔到与前台的举动不异的地位。经由过程利用服务,能够包管使用程序延续的运转,并对事务作出呼应,即便他们被自动地利用也是此。
Service运转时没有专门的GUI,可是,与举动和播送吸收器一样,他们仍旧应当在使用程序历程的主历程实行。上面将为人人扼要先容一下Android中利用Java进线程挪用的利用办法。
1.创立一个线程
[java]viewplaincopy
/**
*@CopyrightbyAlfredZ.Zheng,Cindigo.2011-09.Wuhan.
*AninnovativeclubinHuazhongUniv.ofSci.&Tech.
*Prj.name:org.cindigo.javatestthread1
*/
classMythreadimplementsRunnable{
//Mythread完成了Runnable
intcount;
StringthrdName;
Mythread(Stringname){
count=0;
thrdName=name;
}
publicvoidrun(){
//线程运转出发点
System.out.println(thrdName+"startathread.");
try{
do{
Thread.sleep(1000);
System.out.println("@At"+thrdName+",resultis"+count);
count++;
}while(count<10);
}
catch(InterruptExceptionexc){
System.out.println(thrdName+"interrupted.");
}
System.out.println(thrdName+"timingup!");
}
}
classUseThreads{
publicstaticvoidmain(Stringargs[]){
System.out.println("Startingamainthread...");
//创立一个可运转的对象
MyThreadmyth=newMyThread("ActivityNo.1");
//在该对象上机关一个线程
Threadnewth=newThread(myth);
newth.start();
do{
System.out.println("ActivityNo.2");
try{
Thread.sleep(500);
}catch(InterruptExceptionexc){
System.out.println("ActivityNo.3");
}
}while(myth.count!=10);
System.out.println("ActivityNo.4");
}
}
2.创立多个线程
[java]viewplaincopy
/**
*@CopyrightbyAlfredZ.Zheng,Cindigo.2011-09.Wuhan.
*AninnovativeclubinHuazhongUniv.ofSci.&Tech.
*Prj.name:org.cindigo.javatestthread2
*/
//创立多重线程
classMyThreadimplementsRunnable{
intcount;
Threadthrd;
//创建新线程
MyThread(Stringname){
thrd=newThread(this,name);
count=0;
thrd.start();//开启线程
}
//开启新的主线程
publicvoidrun(){
System.out.println(thrd.getName()+"starting.");
try{
do{
Thread.sleep(500);
System.out.println("In"+thrd.getName()+",countis"+count);
count++;
}while(count<10);
}
catch(InterruptExceptionexc){
System.out.println(thrd.getName()+"interrupted.");
}
System.out.println(thrd.getName()+"timingup!");
}
}
classUseThreadsImpoved{
publicstaticvoidmain(Stringarg[]{
System.out.println("Mainthreadstarting.");
//如今线程在创立时启动
Mythreadmyth=newMyThread("MyActivityNo.1");
do{
System.out.println(".");
try{
Thread.sleep(1000);
}
catch(InterruptExceptionexc){
System.out.println("MyActivityNo.2");
}
}while(myth.count!=10);
System.out.println("MyActivityNo.2");
}
}
上面为人人讲一下AndroidService组件的创立并开端的利用的办法。起首为人人扼要先容一下Service的性命周期。
onBind(Intentintent):是Service完成功效的最主要的办法,挪用时会前往一个绑定的接口给Service。
onCreate():当Service初度创立时被体系主动挪用。
onStart(Intentintent,intstartid):当startService()办法启动Service时,这个办法会被主动挪用。
onDestroy():停止Service时,体系会挪用这个办法。
1.创立一个Service
[java]viewplaincopy
/**
*@Copyright(R)Cindigo,HUST,Wuhan.
*Prj.:org.cindigo.jetaime
*/
importandroid.app.Service;
importandroid.content.Intent;
importandroid.os.Binder;
importandroid.os.IBinder;
importandroid.util.Log;
importandroid.widget.Toast;
publicclassMyServiceextendsService{
privatestaticfinalStringTAG="CONNECTION";
privatestaticfinalbooleanJudge=true;
publicIBinderonBind(Intentintent){
Log.i(TAG,"BindSuccess!");
}
@Override
publicvoidonCreate(){
Toast.makeText(this,"MyServiceCreated",Toast.LENGTH_SHORT).show();
if(Judge)
Log.d(TAG,"onCreate");
}
@Override
publicvoidonStart(Intentintent,intstartid){
Toast.makeText(this,"MyServiceStarted",Toast.LENGTH_SHORT).show();
if(Judge)
Log.d(TAG,"onStart");
}
@Override
publicvoidonDestroy(){
Toast.makeText(this,"MyServiceStopped",Toast.LENGTH_SHORT).show();
if(Judge)
Log.d(TAG,"onDestroy");
}
}
2.启动和中断线程
[java]viewplaincopy
/**
*@Copyright(R)Cindigo,HUST,Wuhan.
*Prj.:org.cindigo.jetaime
*/
importandroid.app.Service;
importandroid.content.Intent;
//创立一个Intent
Intentintent=newIntent();
//设置举措属性
intent.setAction("logging1...");
//启动这个Service
startService(intent);
//停止一个Service
stopService(intent);
3.绑定息争绑一个已存在的Service
[java]viewplaincopy
/**
*@Copyright(R)Cindigo,HUST,Wuhan.
*Prj.:org.cindigo.jetaime
*/
importandroid.content.Intent;
importandroid.content.ServiceConnection;
importandroid.content.SharedPreferences;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.IBinder;
importandroid.util.Log;
publicvoidBindService(){//绑定服务
if(!mIsBound){
bindService(newIntent(this,
ConnectService.class),mConnection,Context.BIND_AUTO_CREATE);
mIsBound=true;
}
}
publicvoidUnbindService(){//解绑服务
if(mIsBound){
unbindService(mConnection);
mIsBound=false;
}
}
privateServiceConnectionmConnection=newServiceConnection(){//服务毗连对象
publicvoidonServiceConnected(ComponentNameclassName,IBinderservice){
mConnectService=((ConnectService.LocalBinder)service).getService();//取得已绑定的服务
mConnectService.GetServer(LOGON_HOST,LOGON_PORT);
mConnectService.connect();
}
publicvoidonServiceDisconnected(ComponentNameclassName){
mConnectService=null;
Log.i("Q","EEE");
}
}
4.使用实例(参考《Android使用开辟详解》)
4.1MainActivity.java文件
[java]viewplaincopy
/**
*@Copyright(R)Cindigo,HUST,Wuhan.
*Prj.:org.cindigo.jetaime
*/
importandroid.app.Activity;
importandroid.app.Service;
importandroid.content.ComponentName;
importandroid.content.Intent;
importandroid.content.ServiceConnection;
importandroid.os.Bundle;
importandroid.os.IBinder;
importandroid.util.Log;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.Toast;
publicclassMainActivityextendsActivity{
//声明Button
privateButtonstartBtn,stopBtn,bindBtn,unbindBtn;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
//设置以后结构视图
setContentView(R.layout.main);
//实例化Button
startBtn=(Button)findViewById(R.id.startButton01);
stopBtn=(Button)findViewById(R.id.stopButton02);
bindBtn=(Button)findViewById(R.id.bindButton03);
unbindBtn=(Button)findViewById(R.id.unbindButton04);
//增加监听器
startBtn.setOnClickListener(startListener);
stopBtn.setOnClickListener(stopListener);
bindBtn.setOnClickListener(bindListener);
unbindBtn.setOnClickListener(unBindListener);
}
//启动Service监听器
privateOnClickListenerstartListener=newOnClickListener(){
@Override
publicvoidonClick(Viewv){
//创立Intent
Intentintent=newIntent();
//设置Action属性
intent.setAction("com.amaker.ch07.app.action.MY_SERVICE");
//启动该Service
startService(intent);
}
};
//中断Service监听器
privateOnClickListenerstopListener=newOnClickListener(){
@Override
publicvoidonClick(Viewv){
//创立Intent
Intentintent=newIntent();
//设置Action属性
intent.setAction("com.amaker.ch07.app.action.MY_SERVICE");
//启动该Service
stopService(intent);
}
};
//毗连对象
privateServiceConnectionconn=newServiceConnection(){
@Override
publicvoidonServiceConnected(ComponentNamename,IBinderservice){
Log.i("SERVICE","毗连乐成!");
Toast.makeText(MainActivity.this,"毗连乐成!",Toast.LENGTH_LONG).show();
}
@Override
publicvoidonServiceDisconnected(ComponentNamename){
Log.i("SERVICE","断开毗连!");
Toast.makeText(MainActivity.this,"断开毗连!",Toast.LENGTH_LONG).show();
}
};
//定Service监听器
privateOnClickListenerbindListener=newOnClickListener(){
@Override
publicvoidonClick(Viewv){
//创立Intent
Intentintent=newIntent();
//设置Action属性
intent.setAction("com.amaker.ch07.app.action.MY_SERVICE");
//绑定Service
bindService(intent,conn,Service.BIND_AUTO_CREATE);
}
};
//排除绑定Service监听器
privateOnClickListenerunBindListener=newOnClickListener(){
@Override
publicvoidonClick(Viewv){
//创立Intent
Intentintent=newIntent();
//设置Action属性
intent.setAction("com.amaker.ch07.app.action.MY_SERVICE");
//排除绑定Service
unbindService(conn);
}
};
}
4.2MyService.java文件
[java]viewplaincopy
/**
*@Copyright(R)Cindigo,HUST,Wuhan.
*Prj.:org.cindigo.jetaime
*/
importandroid.app.Service;
importandroid.content.Intent;
importandroid.os.IBinder;
importandroid.util.Log;
importandroid.widget.Toast;
/**
*@author郭宏志
*测试Service
*/
publicclassMyServiceextendsService{
//能够前往null,一般前往一个有aidl界说的接口
publicIBinderonBind(Intentintent){
Log.i("SERVICE","onBind.");
Toast.makeText(MyService.this,"onBind.",Toast.LENGTH_LONG).show();
returnnull;
}
//Service创立时挪用
publicvoidonCreate(){
Log.i("SERVICE","onCreate.");
Toast.makeText(MyService.this,"onCreate.",Toast.LENGTH_LONG).show();
}
//当客户端挪用startService()办法启动Service时,该办法被挪用
publicvoidonStart(Intentintent,intstartId){
Log.i("SERVICE","onStart.");
Toast.makeText(MyService.this,"onStart.",Toast.LENGTH_LONG).show();
}
//当Service不再利用时挪用
publicvoidonDestroy(){
Log.i("SERVICE","onDestroy.");
Toast.makeText(MyService.this,"onDestroy.",Toast.LENGTH_LONG).show();
}
}

iPhoneSDK安装,然后最基本的是你要熟悉C语言,再来你得学习开发iPhone所使用的Objective-C语言,接著是Cocoa。如果你是Mac平台开发的入门用户
爱飞 该用户已被删除
沙发
发表于 2015-1-19 06:17:19 | 只看该作者
首先是基础,在汉昌的课程非常全面。从object—c到最后的毕业项目,基本上方方面面都涉及到了,我是一名非计算机专业的学生,起初学习还有点吃力,因为基础知识薄弱。经常像听天书
再见西城 该用户已被删除
板凳
发表于 2015-1-24 09:18:04 | 只看该作者
因为我们老师也是自学的,给我们讲课说的最多的就是百度,谷歌,查文档。
山那边是海 该用户已被删除
地板
发表于 2015-1-28 08:03:29 | 只看该作者
在百度搜索你想要了解的类名(苹果的cocoa和cocoatouch框架的类名很有特点很容易搜到,前缀都是NS or UI),看别人写的博客详解
灵魂腐蚀 该用户已被删除
5#
发表于 2015-2-5 13:34:14 | 只看该作者
培训时可以选择安卓,iOS,Java,因为实习的时候我选了安卓,当时实习时间只有三周,学的晕头转向,而java我也没学过,iOS的基础是C语言,这个大学里还是学过的,于是选择了iOS。
乐观 该用户已被删除
6#
发表于 2015-2-5 13:52:27 | 只看该作者
其实在培训的过程中,学习到最多的就是查资料的方式,当时感觉老师好坑,什么都不告诉我们,让我们自己去查,但是现在觉得还是要自己解决问题,这样才能理解的更加深入。
莫相离 该用户已被删除
7#
发表于 2015-2-6 16:19:57 | 只看该作者
自从苹果公司开放iOS SDK以来,大量的国内外的软件开发者将关注的目光聚集在苹果的iOS平台上。由于iPhone和iPad自一出现就给人带来了颠覆性的感觉
若天明 该用户已被删除
8#
发表于 2015-2-17 04:09:33 | 只看该作者
看完这个你就可以有多种选择来踏入做应用的阶段
谁可相欹 该用户已被删除
9#
发表于 2015-2-19 13:49:22 | 只看该作者
同很多iOS开发者一样,我也是通过培训进入到iOS开发这个行业,开始没有打算培训,只准备自己学习一些计算机编程相关的知识,毕业时找一份编程相关工作(本人是信息与计算科学这个专业,是数学系)。
admin 该用户已被删除
10#
发表于 2015-2-27 15:13:35 | 只看该作者
因为我们老师也是自学的,给我们讲课说的最多的就是百度,谷歌,查文档。
第二个灵魂 该用户已被删除
11#
发表于 2015-3-9 06:42:57 | 只看该作者
从C语言入门,因为IOS开发用的是OC语言,是在C基础上的,不过也跟C不是很搭界,你可以直接学习OC语言也可以,
分手快乐 该用户已被删除
12#
发表于 2015-3-11 20:01:17 | 只看该作者
在百度搜索你想要了解的类名(苹果的cocoa和cocoatouch框架的类名很有特点很容易搜到,前缀都是NS or UI),看别人写的博客详解
因胸联盟 该用户已被删除
13#
发表于 2015-3-14 18:33:10 | 只看该作者
开始的时候甚至想放弃,不过想想自己的未来,只能咬牙坚持,课下就不停的缠着老师。放学就补基础,这些基础的东西没有速成的,只有刻苦努力。我是后来发现的,转变自己的心态,不要读书看资料当成一种痛苦
小女巫 该用户已被删除
14#
发表于 2015-3-16 04:10:59 | 只看该作者
看完这个你就可以有多种选择来踏入做应用的阶段
蒙在股里 该用户已被删除
15#
发表于 2015-3-22 20:08:09 | 只看该作者
才在自己的Windows电脑上安装配置成功了一个完美的Mac OS X Lion(10.7.4)系统,而且下载了Xcode4.5的最新版本。虽然不能实机调试,但是作为iOS开发学习已经非常完美了。
16#
发表于 2015-3-22 20:08:10 | 只看该作者
近期由于IOS7的发布,所以应用的适配潮可谓是都搞的锣鼓喧天,甚是热闹,因此呢,因适配IOS7而产生的问题也是铺天盖地的卷来,
透明 该用户已被删除
17#
发表于 2015-3-26 09:30:47 | 只看该作者
iPhone文件系统:创建、重命名以及删除文件,NSFileManager中包含了用来查询单词库目录、创建、重命名、删除目录以及获取/设置文件属性的方法(可读性,可编写性等等)。
兰色精灵 该用户已被删除
18#
发表于 2015-4-6 09:59:58 | 只看该作者
重要的是,放眼全球也的确找不到第二个如苹果iOS平台这样健壮、完整、先进而且为开发者带来真实收益的开发平台来。
简单生活 该用户已被删除
19#
发表于 2015-4-8 17:26:28 | 只看该作者
每个行业都一样,想要一天学有所成是不可能的,一定要做好努力的准备,做ios不是简单的学会oc语言。不怕多走弯路,就怕不肯动手。
若相依 该用户已被删除
20#
发表于 2015-4-13 00:03:32 | 只看该作者
好处就是运行速度会变快,ios6针对系统的优化进一步加强了,很多网友测试ios6,第一感觉就是速度快,而且ios69会有一些新功能,新浪微博,facetime支持3G网等等。。弊端就是,现在的ios6只能算是正式版本的第一个版本,bug很多,不少人刷完ios6都出现了很多毛病,开不开机,缺少图标等等。。最好现在不要升级,等官网放出下一个版本的时候,再选择升级。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-29 22:33

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表