志在指尖
用双手敲打未来

android知识点总结

1.activity的生命周期
函数调用过程:
发动第一个Activity的时分:
第一次创立onCreate()–>Activity可见了onStart()–>Activity可以操作了onResume()。
点击第一个Activity上的按钮经过Intent跳到第二个Activity:
第一个Activity暂停onPause()–>创立第二个ActivityonCreate()–>Activity可见onStart()–>Activity可操作onResume()–>第一个Activity被第二个Activity彻底隐瞒onStop()(假如调用了finish(),或许体系资源紧缺,则会被毁掉onDestory())。
点击体系回来功用建,从第二个Activity回到第一个Activity:
第二个Activity暂停onPause()–>第一个Activity重发动OnRestart()(并没有被毁掉,假如毁掉了则要创立onCreate())–>第一个Activity可见onStart()–>第一个Activity可操作onResume()–>第二个Activity被彻底隐瞒onStop()(假如调用了finish(),或许体系资源紧缺,则会被毁掉onDestory())。
2.android动画分类
tweenedanimation(补间动画)和
frame-by-frameanimation(帧动画),一般咱们用的是第一种。补间动画又分为AlphaAnimation,透明度转化
RotateAnimation,旋转转化ScaleAnimation,缩放转化TranslateAnimation位置转化(移动)。
3.MessageQueue(音讯行列):用来寄存经过Handler发布的音讯,一般附归于某一个创立它的线程,可以经过Looper.myQueue()得到当时线程的音讯行列;线程:UIthread一般便是mainthread,而Android发动程序时会替它树立一个MessageQueue;andriod供给了Handler和Looper来满意线程间的通讯;Looper:一个线程可以发生一个Looper目标,由它来办理此线程里的MessageQueue(音讯行列);Handler先进先出原则,可以结构Handler目标来与Looper沟通,以便push新音讯到MessageQueue里;或许接纳Looper从MessageQueue取出)所送来的音讯。
andler获取当时线程中的looper目标,looper用来从寄存Message的MessageQueue中取出Message,再有Handler进行Message的分发和处理.
Looper也把音讯行列里的音讯播送给所有的Handler:Handler接受到音讯后调用handleMessage进行处理,
判别Handler目标里边的Looper目标是归于哪条线程的,则由该线程来履行!
1.当Handler目标的结构函数的参数为空,则为当时地点线程的Looper;
2.Looper.getMainLooper()得到的是主线程的Looper目标,Looper.myLooper()得到的是当时线程的Looper目标。
4.默认状况下,一个Android程序也只要一个Process,但一个Process下却可以有许多个Thread;所有这个程序中的Activity、Service都会跑在这个Proces;一个Android程序开始运转时,就有一个主线程MainThread被创立。该线程首要担任UI界面的显现、更新和控件交互,所以又名UIThread;一个Android程序创立之初,一个Process呈现的是单线程模型–即MainThread,所有的使命都在一个线程中运转。所以,MainThread所调用的每一个函数,其耗时应该越短越好。而关于比较费时的作业,应该设法交给子线程去做,以防止阻塞主线程(主线程被阻塞,会导致程序假死现象);Android单线程模型:AndroidUI操作并不是线程安全的而且这些操作有必要在UI线程中履行。假如在子线程中直接修改UI,会导致异常。
5.sim卡的文件体系有自己规范,首要是为了和手机通讯,sim自身可以有自己的操作体系,sim卡的EF文件便是作存储并和手机通讯用的。
6.如何将sqlite数据库文件a.db与apk一同发布?可以将a.db文件复制到EclipseAndroid工程中的res
raw目录,在resraw目录中的文件不会被压缩,这样可以直接提取该目录中的文件;Android中不能直接翻开resraw目录中的数据库文件,而需要在程序第一次发动时将该文件复制到手机内存或SD卡的某个目录中,然后再翻开该数据库文件。复制的根本办法是运用getResources().openRawResource办法取得res
raw目录中资源的InputStream目标,然后将该InputStream目标中的数据写入其他的目录中相应文件中。在AndroidSDK中可以运用SQLiteDatabase.openOrCreateDatabase办法来翻开任意目录中的SQLite数据库文件。
7.Android中MVC的具体体现:视图层(view):一般选用xml文件进行界面的描述,也可以运用javascript+html等的办法作为view层,当然需要进行java和javascript之间的通讯。模型层(model):对数据库的操作、对网络等的操作都应该在model里边处理,当然对事务核算等操作也是有必要放在的该层的;操控层(controller):android的操控层的重任一般落在了众多的acitvity的肩上,这句话也就暗含了不要在acitivity中写事务代码,要经过activity交给model层做事务逻辑的处理,
android中的acitivity的响应时间是5s,假如耗时的操作放在这里,程序就很简单被收回掉。第一步:承继Service类publicclassSMSServiceextendsService{},第二步:在AndroidManifest.xml文件中的节点里对服务进行装备:,;Context.startService()或Context.bindService()办法发动服务。,调用者与服务之间没有干系,即使调用者退出了,服务依然运转。运用bindService()办法启用服务,调用者与服务绑定在了一同。Context.startService()体系会先调用服务的onCreate()办法,接着调用onStart()办法。假如调用startService()办法前服务现已被创立,屡次调用startService()办法并不会导致屡次创立服务,但会导致屡次调用onStart()办法,选用startService()办法发动的服务,只能调用Context.stopService()办法完毕服务,服务完毕时会调用onDestroy()办法。onCreate()该办法在服务被创立时调用,该办法只会被调用一次,无论调用多少次startService()或bindService()办法,服务也只被创立一次。onDestroy()该办法在服务被停止时调用。onStart()只要选用Context.startService()办法发动服务时才会回调该办法。该办法在服务开始运转时被调用。屡次调用startService()办法尽管不会屡次创立服务,但onStart()办法会被屡次调用。onBind()只要选用Context.bindService()办法发动服务时才会回调该办法。该办法在调用者与服务绑定时被调用,当调用者与服务现已绑定,屡次调用Context.bindService()办法并不会导致该办法onBind()被屡次调用。
选用Context.bindService()办法发动服务的代码如下:publicclassHelloActivityextendsActivity{
ServiceConnectionconn=newServiceConnection(){
publicvoidonServiceConnected(ComponentNamename,IBinderservice){
}
publicvoidonServiceDisconnected(ComponentNamename){
}
};
@Override
publicvoidonCreate(BundlesavedInstanceState){
Buttonbutton=(Button)this.findViewById(R.id.button);
button.setOnClickListener(newView.OnClickListener(){
publicvoidonClick(Viewv){
Intentintent=newIntent(HelloActivity.this,SMSService.class);
bindService(intent,conn,Context.BIND_AUTO_CREATE);
//unbindService(conn);//解除绑定
}});
}
}
8.px:表明屏幕实际的象素,in:表明英寸,是屏幕的物理尺度,
dp是与密度无关,sp除了与密度无关外,还与scale无关,运用dp和sp,体系会根据屏幕密度的变化自动进行转化..
9.standard:规范形式,一调用startActivity()办法就会发生一个新的实例;
singleTop:假如现已有一个实例坐落Activity栈的顶部时,就不发生新的实例,而仅仅调用Activity中的newInstance()办法。假如不坐落栈顶,会发生一个新的实例。singleTask:会在一个新的task中发生这个实例,今后每次调用都会运用这个,不会去发生新的实例了。singleInstance:这个跟singleTask根本上是相同,只要一个差异:在这个形式下的Activity实例所处的task中,只能有这个activity实例,不能有其他的实例。
10.androidintent:Android运用中,首要是由一些组件组成,(Activity,Service,ContentProvider,etc.)在这些组件之间的通讯中,由Intent帮忙完结.
Intent担任对运用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,担任找到对应的组件,将Intent传递给调用的组件,并完结组件的调用。Intent在这里起着完结调用者与被调用者之间的解耦效果。
显现匹配(Explicit):
1.publicTestBextentsActivity
2.{
3……….
4.};
5.publicclassTestextendsActivity
6.{
7…….
8.publicvoidswitchActivity()
9.{
10.Intenti=newIntent(Test.this,TestB.class);
11.this.startActivity(i);
12.}
13.}
代码简洁明了,履行了switchActivity()函数,就会立刻跳转到名为TestB的Activity中。
隐式匹配(Implicit):
首先要匹配Intent的几项值:Action,Category,Data/Type,Component
假如填写了Componet便是上例中的Test.class)这就形成了显现匹配。匹配规矩为最大匹配规矩.
11.当你的程序中某一个ActivityA在运转时中,自动或被动地运转另一个新的ActivityB,
这个时分A会履行publicvoidonSaveInstanceState(BundleoutState){
super.onSaveInstanceState(outState);
outState.putLong(“id”,1234567890);}
B完结今后又会来找A,这个时分就有两种状况,一种是A被收回,一种是没有被收回,被回
收的A就要重新调用onCreate()办法,不同于直接发动的是这回onCreate()里是带上参数savedInstanceState,没被收回的就还是onResume。
savedInstanceState是一个Bundle目标,你根本上可以把他理解为体系帮你保护的一个Map目标。在onCreate()里你可能会用到它,假如正常发动onCreate就不会有它,所以用的时分要判别一下是否为空。
if(savedInstanceState!=null){
longid=savedInstanceState.getLong(“id”);
}
12.关于单一Activity的运用来说,退出很简单,直接finish()即可。当然,也可以用killProcess()和System.exit()这样的办法。为了编程便利,最好定义一个Activity基类,处理这些共通问题:封闭多个activity.
13.Android供给了5种办法存储数据,(1)运用SharedPreferences存储数据,它是Android供给的用来存储一些简单装备信息的一种机制,选用了XML格局将数据存储到设备中。只能在同一个包内运用,不能在不同的包之间运用.(2)文件存储数据;文件存储办法是一种较常用的办法,在Android中读取/写入文件的办法,与Java中完结I/O的程序是彻底相同的,供给了openFileInput()和openFileOutput()办法来读取设备上的文件。(3)SQLite数据库存储数据;SQLite是Android所带的一个规范的数据库,它支持SQL句子,它是一个轻量级的嵌入式数据库。(4)运用ContentProvider存储数据;首要用于运用程序之间进行数据交换,然后可以让其他的运用保存或读取此ContentProvider的各种数据类型。(5)网络存储数据;经过网络上供给给咱们的存储空间来上传(存储)和下载(获取)咱们存储在网络空间中的数据信息。
14.Activity:活动,一个活动便是一个用户可以操作的可视化用户界面,每一个活动都被完结为一个独立的类,而且从活动基类承继而来。Intent:意图,最重要的部分是动作和动作对应的数据。ContentProvider:内容供给器,android运用程序可以将它们的数据保存到文件、SQLite数据库中,甚至是任何有用的设备中。当你想将你的运用数据和其他运用同享时,内容供给器就可以发挥效果了。
15.view是最根底的,有必要在UI主线程内更新画面,速度较慢。SurfaceView是view的子类,类似运用双缓机制,在新的线程中更新画面所以改写界面速度比view快,
GLSurfaceView是SurfaceView的子类,opengl专用的。
16.(1)所有的运用程序都有必要有数字证书,Android体系不会装置一个没有数字证书的运用程序
(2)Android程序包运用的数字证书可以是自签名的,不需要一个威望的数字证书组织签名认证
(3)假如要正式发布一个Android程序,有必要运用一个合适的私钥生成的数字证书来给程序签名,而不能运用adt插件或许ant东西生成的调试证书来发布。
(4)数字证书都是有有用期的,Android仅仅在运用程序装置的时分才会检查证书的有用期。假如程序现已装置在体系中,即使证书过期也不会影响程序的正常功用。
17.LinearLayout有两个十分类似的属性:android:gravity与android:layout_gravity。咱们可以经过设置android:gravity=”center”来让EditText中的文字在EditText组件中居中显现;同时咱们设置EditText的android:layout_gravity=”right”来让EditText组件在LinearLayout中居右显现
18.注册播送接纳者:首先写一个类要承继BroadcastReceiver
第一种:在清单文件中声明,添加
第二种运用代码进行注册如:
IntentFilterfilter=newIntentFilter(“android.provider.Telephony.SMS_RECEIVED”);
IncomingSMSReceiverreceiver=newIncomgSMSReceiver();
registerReceiver(receiver.filter);
1)第一种是常驻型(静态注册),也便是说当运用程序封闭后,假如有信息播送来,程序也会被体系调用自动运转。
2)第二种不是常驻型播送(动态注册),也便是说播送跟随程序的生命周期。
19.双缓冲技术原理:创立一幅后台图画,将每一帧画入图画,然后调用drawImage()办法将整个后台图画一次画到屏幕上去.要分配一个后台图画的缓冲,假如图画相当大,这将占用很大一块内存。
20.AsyncTask咱们一般会将耗时的操作放在单独的线程履行,防止其占用主线程而给用户带来欠好的用户体会。但是在子线程中无法去操作主线程(UI线程),在子线程中操作UI线程会出现过错.
android供给了一个类Handler来在子线程中来更新UI线程,用发音讯的机制更新UI界面,呈现给用户.时的使命操作总会发动一些匿名的子线程,太多的子线程给体系带来巨大的负担,随之带来一些性能问题。因此android供给了一个东西类AsyncTask,望文生义异步履行使命.不再需要子线程和Handler就可以完结异步操作而且改写用户界面。
21.Socket通讯编程,
客户端编程过程:
1、创立客户端套接字(指定服务器端IP地址与端口号)
2、衔接(Android创立Socket时会自动衔接)
3、与服务器端进行通讯
4、封闭套接字
服务器端:
1.创立一个ServerSocket,用于监听客户端Socket的衔接恳求
2.选用循环不断接受来自客户端的恳求
3.每当接受到客户端Socket的恳求,服务器端也对应发生一个Socket

未经允许不得转载:IT技术网站 » android知识点总结
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载