第一次发帖
什么是Activity?
俗通一点说Activity就是一个界面,这个界面里头可以放置各种件控。Activity的界面也是用xml件文表现的,放置在res->layout上面。每生成一个新的Activity后,我们须要在AndroidManifest.xml中注册一下这个activity
Activity生命周期
onCreate(Bundle savedInstanceState):建创activity时调用。设置在该方法中,还以Bundle的式形供给对前以存储的任何状态的问访!
onStart()
:
activity
为变在幕屏上对户用可见时调用。
onResume():activity开始与户用交互时调用(无论是动启还是从新动启一个活动,该方法是总被调用的)。
onPause():activity被暂停或收回cpu和其他资源时调用,该方法于用存保活动状态的,也是掩护现场,压栈吧!
onStop():activity被止停并转为弗成见阶段及后续的生命周期事件时调用。
onRestart():从新动启activity时调用。该活动仍在栈中,而不是动启新的活动。
onDestroy():activity被完整从统系存内中移除时调用,该方法被调用
函数调用程过:
动启第一个Activity的时候:
第一次建创onCreate()-->Activity可见了onStart()-->Activity可以作操了onResume()。
两个Activity之间跳转时必然会执行的是哪几个方法
onCrante() //在Activity生命周期开始时调用
onRestoreInstanceState()//用来恢复UI状态
onReStart()//当Activity从新动启时调用
onStart()//Activity对户用即将可见时调用
onResume()//当Activity与户用交互时,绘制界面
onSaveInstanceState()//activity即将移出栈顶留保UI状态时调用
onPause()//暂停前当活动activity,提交速决数据的转变,止停动画和其他占用CPU资源的货色,由于下一个activity在这个方法返回之前不会resume,所以这个方法的码代执行要快。
onStop()//activity不再可见时调用
onDestroy()//在Activity销毁钱被调用的最后一个方法。
点击第一个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())。
竖横屏换切时候Activity的生命周期
1、不设置Activity的android:configChanges时,切屏会从新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges="orientation"时,切屏还是会从新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会从新调用各个生命周期,只会执行onConfigurationChanged方法
如何将一个Activity设置成窗口的款式
1、在你的styles.xml件文中可以建新一如下的似类Dialog的style
<style name="Theme.FloatActivity"parent="android:style/Theme.Dialog"></style>
2、在AndroidManifest.xml中在你须要示显为窗口的activity中添加如下属性:android:theme="@style/Theme.FloatActivity" 可即
也可以直接添加您对应须要示展为Dialog style的Activity的android:theme属性值为android:theme="@android:style/Theme.Dialog"。
你后台的Activity被统系回收怎么办?
统系会帮我们记载下回收前Activity的状态,再次调用被回收的Activity就要从新调用onCreate()方法,不同于直接动启的是这回onCreate()里是带上参数savedInstanceState。savedInstanceState是一个Bundle对象,你基本上可以把他理解为统系帮你护维的一个Map对象,我们用使savedInstanceState可以恢复到回收前的状态。
如何出退Activity?如何安全出退已调用多个Activity的Application?
用finish()方法出退activity.
两个Activity之间怎么传递数据?
在Intent的对象中加增要传递的参数既可。在Intent的对象的请求中参加键值对,对象名字.putExtra("键值对的名字","键值对的值");在另一个Activity中将Intent请求中的数据掏出来:Intent intent=getIntent();//String value = intent.getStringExtra("testIntent");//将testIntent对应的值赋值给value
怎么在动启一个Activity时就动启一个service?
将动启
Service
的语句放在
onCreate()
方法中
同一个序程,但不同的Activity否是可以放在不同的Task任务栈中?
可以放在不同的Task中。须要为不同的activity设置不同的taskaffinity属性,动启activity的Intent须要包括FLAG_ACTIVITY_NEW_TASK标记。
Activity怎么和service绑定,怎么在activity中动启自己对应的service?
1、Activity能停止绑定得益于Service的接口。为了支撑Service的绑定,现实onBind方法。
2、Service和Activity的连接可以用ServiceConnection来现实。你须要现实一个新的ServiceConnection,重写onServiceConnected和onServiceDisconnected方法,一旦连接建立,你能就失失落Service例实的引用。
3、执行绑定,调用bindService方法,传入一个选择了要绑定的Service的Intent(式显或式隐)和一个你现实了的ServiceConnection例实
什么是Service以及描述下它的生命周期
Android Service是行运在后台的码代,不能与户用交互,可以行运在自己的进程,也可以行运在其他应用序程进程的上下文里。须要通过某一个Activity或者其他Context对象来调用,Context.startService() 和Context.bindService()。如果在Service执行耗时的作操须要动启一个新线程来执行。
Android Service只继承了onCreate(),onStart(),onDestroy()三个方法,当我们第一次动启Service时,后先调用了onCreate(),onStart()这两个方法,当止停Service时,则执行onDestroy()方法,这里须要注意的是,如果Service已动启了,当我们再次启Service时,不会在执行onCreate()方法,而是直接执行onStart()方法。
Service有哪些动启方法,有什么区别,怎样停用Service?
两种动启
Service
的式方
Context.startService()
和
Context.bindService()
。
区别为:
Context.startService():Service会历经onCreate -> onStart(如果Service还没有行运,则android先调用onCreate()然后调用onStart();如果Service已行运,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次);stopService的时候直接onDestroy,如果是调用者自己直接出退而没有调用stopService的话,Service会一直在后台行运。该Service的调用者再动启起来后可以通过stopService关闭Service
Context.bindService():Service会历经onCreate() -> onBind(),onBind将返回给客户端一个IBind接口例实,IBind许允客户端回调务服的方法,比如失失落Service行运的状态或其他作操。这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context出退了,Srevice就会调用onUnbind -> onDestroyed应相出退,所谓绑定在一起就共存亡了。
停用service用使context.stopService()
用不service,B面页为音乐播放,从A跳转到B,再返回,如何使音乐继承播放?
a 用使startActivityForResult() 方法开启b,b类结束时调用finish();
a类的intent有一个子activity结束事件onActivityResult(),在事件里继承播放音乐
什么是IntentService?有何点优?
IntentService也是一个Service,是Service的子类,IntentService和Service有所不同,通过Looper和Thread来处理标准Service中处置逻辑的塞阻题问。
点优:Acitivity的进程,当处置Intent的时候,会生产一个对应的Service
Android的进程处置器在现会尽可能的不kill失落你
非常轻易用使
日历中IntentService的应用
什么时候用使Service?
比如播放多媒体的时候户用动启了其他Activity这个时候序程要在后台继承播放,比如测检SD卡上件文的变更,再或者在后台记载你地理信息置位的转变等等,总之务服嘛,是总藏在头后的。
请描述一下Intent 和 Intent Filter
Intent在Android中被翻译为"图意",熟语来讲就是的目,他们是三种应用序程基本组件—activity,service和broadcast receiver之间互相激活的手腕。在调用Intent名称时用使ComponentName也就是类的全名时为示显调用。这类式方一般于用应用序程的部内调用,因为你一不定会晓得别人写的类的全名。我们来看看式隐Intent怎么用?首先我们先配置我们的Activity的Intent Filter
<intent-filter><actionandroid:name="com.example.project.SHOW_CURRENT"/></intent-filter>
这样在调用的时候指定Intent的action,统系就是主动的去比对是哪个intent-filter符合我们的Activity,找到后就会动启Activity。
一个intent filter是IntentFilter类的例实, 但是它一般不出在现码代中,而是出在现android Manifest件文中, 以<intent-filter>的式形. (有一个外例是broadcast receiver的intent filter是用使Context.registerReceiver()来态动设定的, 其intent filter也是在码代中建创的.)
一个filter有action, data, category等字段. 一个式隐intent为了能被某个intent filter受接, 必须通过3个测试. 一个intent为了被某个组件受接, 则必须通过它所有的intent filter中的一个.
Intent传递数据时,可以传递哪些类型数据?
Intent间送传数据一般有两种经常使用的法办:
1.extra
2.data.
extra可以用Intent.putExtra放入数据。新动启的Activity可用Intent.getExtras掏出来Bundle, 然后用Bundles.getLong, getInt, getBoolean, getString等函数来取放进入的值。
而data则是输传url。url可所以指我们熟习的http, ftp 等网络地址,也可以指content来向指ContentProvider供给的资源。Intent.setData可以放入数据,Intent.getData可以掏出数据。
说说Activity,Intent,Service是什么系关
一个Activity通常是一个独单的幕屏,每个Activity都被现实为一个独单的类,这些类都是从Activity类基中继承来的,Activity类会示显由视图件控构成的户用接口,并对视图件控的事件做出响应。
Intent的调用是用来停止架构幕屏之间的换切的。Intent是描述应用想要做什么。Intent数据结构中两个最要重的部份是动作和动作对应的数据,一个动作对应一个动作数据。
Android Service是行运在后台的码代,不能与户用交互,可以行运在自己的进程,也可以行运在其他应用序程进程的上下文里。须要通过某一个Activity或者其他Context对象来调用。
Activity跳转到Activity,Activity动启Service,Service开打Activity都须要Intent标明跳转的图意,以及传递参数,Intent是这些组件间信号传递的承载者。
请描述一下Broadcast Receiver
Broadcast Receiver于用接收并处置广播通知(broadcast announcements)。多数的广播是统系发起的,如地域变换、电量不足、来电来信等。序程也可以播放一个广播。序程可以有任意数量的broadcast receivers来响应它觉得要重的通知。broadcast receiver可以通过多种式方通知户用:动启activity、用使NotificationManager、开启背景灯、振动设备、播放
声音等,最典型的是在状态栏示显一个图标,这样户用就可以点它开打看通知内容。通常我们的某个应用或统系本身在某些事件(电池电量不足、来电来短信)来临时会广播一个Intent出去,我们可以利用注册一个Broadcast Receiver来监听到这些Intent并获取Intent中的数据。
在manifest和码代中如何注册和用使 broadcast receiver
1)在AndroidManifest.xml中注册
<receiver android:name="Receiver1">
<intent-filter>
<!--和Intent中的action对应-->
<actionandroid:name="com.forrest.action.mybroadcast"/>
</intent-filter>
</receiver>
2)在码代中注册
1.IntentFilterfilter=newIntentFilter("com.forrest.action.mybroadcast");//和广播中Intent的action对应
2.MyBroadcastReceiverbr=newMyBroadcastReceiver();
3. registerReceiver(newMyBroadcastReceiver(),filter);
请介绍下ContentProvider是如何现实数据共享的
ContentProvider是通过供给Uri来现实数据共享
请介绍下Android的数据存储式方
Android供给了5种式方存储数据:用使SharedPreferences存储数据;件文存储数据;SQLite数据库存储数据;用使ContentProvider存储数据;网络存储数据;
为什么要用ContentProvider?它和sql的现实上有什么差别?
用使ContentProvider可以将数据共享给其他应用,让除本应用之外的应用也可以问访本应用的数据。它的底层是用SQLite数据库现实的,所以其对数据做的各种作操都是以Sql现实,只是在上层供给的是Uri。
请介绍下Android中经常使用的五种布局
最经常使用的布局式方为LinearLayout、RelativeLayout、FrameLayout、TableLayout AbsoluteLayout。其中LinearLayout和RelativeLayout是最经常使用的式方,他们可以通过在xml配置件文或者码代中停止布局
FrameLayout 最简单的布局式方,放置的件控都只能罗列到左上角,件控会有重叠,不能停止复杂的布局。这个布局可以看成是墙脚堆货色,有一个四方的矩形的左上角墙脚,我们放了第一个货色,要再放一个,那就在放在原来放的置位的上面,这样依次的放,会盖住原来的货色。这个布局比较简单,也只能放一点比较简单的货色。
LinearLayou可以通过orientation属性设置线性排列的方向是垂直(vertical)还是纵向(horizontal).每行或每列只有一个元素,可以停止复杂的布局。
AbsoluteLayout 可以让子元素指定准确的x/y坐标值,并示显在幕屏上。AbsoluteLayout 没有页边框,许允元素之间互相重叠(尽管不推荐)。他是绝对坐标,所以在实际中不提倡用使。
RelativeLayout 许允子元素指定他们相对于其它元素或父元素的置位(通过ID 指定)。因此,你可以以右对齐,或上下,或置于幕屏中央的式形来排列两个元素。元素按顺序排列,因此如果第一个元素在幕屏的中央,那么相对于这个元素的其它元素将以幕屏中央的相对置位来排列。这个是相对于AbsoluteLayout 的,采用的相对坐标,所以在实际中比较经常使用。
TableLayout 将子元素的置位分配到行或列中。一个TableLayout 由许多的TableRow 构成,每个TableRow 都会定义一个row 。TableLayout 容器不会示显row 、column或cell 的边框线。每个row 拥有0个或多个的cell ;和html中的table差不多。在实际中也经经常使用使。
有的时候我们也会用到GridView,就像我们手机幕屏上摆放的各个图标应该就是用GridView排版的。Padding是文字相对于边框,而Margin是边框相对于父窗体。
谈谈UI中, Padding和Margin有什么区别?
Padding是文字相对于边框,而Margin是边框相对于父窗体。
AIDL的全称是什么?如何工作?能处置哪些类型的数据?
AIDL是一种接口定义语言,于用约束两个进程间的通信规则,供编译器生成码代,现实Android设备上的进程间通信。
进程之间的通信信息首先会被转换成AIDL协议消息,然后发送给对方,对方受到AIDL协议消息后再转换成应相的对象。
AIDL支撑的类型包括Java基础类型和String,List,Map,CharSequence,如果用使自定义类型,必须现实Parcelable接口。
请解释下Android序程行运时权限与件文统系权限的区别。
行运时Dalvik( android授权)
件文统系linux 内核授权
如何加载的音乐信息,如何改善其效率。
Android统系供给了MediaScanner,MediaProvider,MediaStore等接口,并且供给了一套数据库表格,通过Content Provider的式方供给给户用。当手机开机或者有SD卡插拔等事件发生时,统系将会主动扫描SD卡和手机存内上的媒体件文,如audio,video,图片等,将应相的信息放到定义好的数据库表格中。
改善效率可以从界面须要查询必备数据,不须要的不停止查询。
ListView如何提高其效率?
用使分页加载,不要一次性加载所有数据
动启一个序程,可以主界面点击图标进入,也可以从一个序程中跳转过去,二者有什么区别?
从主界面动启一个应用序程是通过快捷式方直接调用mainActivity动启的,从其他应用序程调用须要式隐的通过Action或者在Intent中须要用使setClass(),且要写明包路径。
Android序程与Java序程的区别?
android序程是Java编写的,但序程用使的android开发的API,就是andriod的库。
谈谈对Android NDK的理解。
Android NDK是一套工具,许允Android应用开发者嵌入从C、C++源码代件文编译来的本地机器码代到各自的应用软件包中。
Android统系中GC什么情况下会出现存内泄露呢?
出现情况:1. 数据库的cursor没有关闭2.构造adapter时,没有用使缓存contentview衍生listview的优化题问-----减少建创view的对象,充分用使contentview,可以用使一静态类来优化处置getview的程过/3.Bitmap对象用不使时采用recycle()释放存内4.activity中的对象的生命周期大于activity调试方法: DDMS==>HEAPSZIE==>dataobject==>[Total Size]
Android UI中的View如何刷新。
一般只是希望在View发生转变时对UI停止重绘。你只需在Activity中式显地调用View对象中的invalidate()方法可即。统系会主动调用View的onDraw()方法。
android中的动画有哪几类,它们的特点和区别是什么?
两种,一种是Tween动画、还有一种是Frame动画。Tween动画,这类现实式方可以使视图组件移动、放大、缩小以及生产透明度的变更;另一种Frame动画,传统的动画方法,通过顺序的播放排列好的图片来现实,似类电影。
动画效果在anim目录下的xml件文中定义,在序程中用AnimationUtils.loadAnimation(Context context,int ResourcesId)载入成Animation对象,在须要示显动画效果时,执行须要动画的View的startAnimation方法,传入Animation,可即。换切Activity也可以应用动画效果,在startActivity方法后,执行overridePendingTransition方法,两个参数分别是换切前的动画效果,换切后的动画效果。
handler机制的原理。
Andriod供给了Handler和Looper来满足线程间的通信.Handler先进先出原则.Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)
1)Looper: 一个线程可以生产一个Looper对象,由它来管理此线程里的Message Queue(消息队列).
2)Handler:你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper从Message Queue掏出)所送来的消息.
3) Message Queue(消息队列):用来存放线程放入的消息。
4)线程:UI thread 通常就是main thread,而Android动启序程时会替它建立一个Message Queue。
android中线程与线程,进程与进程之间如何通信
1、一个 Android 序程开始行运时,会独单动启一个Process。
默认情况下,所有这个序程中的Activity或者Service都会跑在这个Process。
默认情况下,一个Android序程也只有一个Process,但一个Process下却可以有许多个Thread。
2、一个 Android 序程开始行运时,就有一个主线程Main Thread被建创。该线程主要负责UI界面的示显、更新和件控交互,所以又叫UI Thread。
一个Android序程建创之初,一个Process呈现的是单线程模型--即Main Thread,所有的任务都在一个线程中行运。所以,Main Thread所调用的每个函数,其耗时应该越短越好。而对于比较费时的工作,应该设法交给子线程去做,以避免塞阻主线程(主线程被塞阻,会导致序程假死 现象)。
3、Android单线程模型:Android UI作操并不是线程安全的并且这些作操必须在UI线程中执行。如果在子线程中直接修改UI,会导致异常。
说说mvc模式的原理,它在android中的运用
MVC(Model_view_contraller)”模型_视图_控制器”。MVC应用序程是总由这三个部份构成。Event(事件)导致Controller转变Model或View,或者同时转变两者。只要Controller转变了Models的数据或者属性,所有依赖的View都会主动更新。似类的,只要Contro
Android中各种界面的监听作操就是MVC的应用。
如何将SQLite数据库(dictionary.db件文)与apk件文一起发布?
可以将dictionary.db件文复制到Eclipse Android工程中的res raw目录中。所有在res raw目录中的件文不会被压缩,这样可以直接提取该目录中的件文。可以将dictionary.db件文复制到res raw目录中
Android经常使用件控的信息
单选框(RadioButton与RadioGroup):
RadioGroup于用对单选框停止分组,相同组内的单选框只有一个单选框被选中。
事件:setOnCheckedChangeListener(),处置单选框被选择事件。把RadioGroup.OnCheckedChangeListener例实作为参数传入。
多选框(CheckBox):
每个多选框都是独立的,可以通过迭代所有的多选框,然后根据其状态否是被选中在获取其值。
事件:setOnCheckedChangeListener(),处置多选框被选择事件。把CheckBox.OnCheckedChangeListener()例实作为参数传入。
下拉列表框(Spinner):
Spinner.getItemAtPosition(Spinner.getSelectedItemPosition());获取下拉列表框的值。
事件:setOnItemSelectedListener(),处置下拉列表框被选择事件把Spinner.OnItemSelectedListener()例实作为参数传入。
拖动条(SeekBar):
SeekBar.getProgress()获取拖动条前当值
事件:setOnSeekBarChangeListener(),处置拖动条值变更事件,把SeekBar.OnSeekBarChangeListener例实作为参数传入。
菜单(Menu):
重写Activity的onCreatOptionMenu(Menu menu)方法,该方法于用建创选项菜单,当户用按下手机的"Menu"按钮时就会示显建创好的菜单,在onCreatOptionMenu(Menu Menu)方法部内可以调用Menu.add()方法现实菜单的添加。
重写Activity的onMenuItemSelected()方法,该方法于用处置菜单被选择事件。
进度对话框(ProgressDialog):
建创并示显一个进度对话框:ProgressDialog.show(ProgressDialogActivity.this,"请稍等","数据正在加载中....",true);
设置对话框的风格:setProgressStyle()
ProgressDialog.STYLE_SPINNER 旋转进度条风格(为默认风格)
ProgressDialog.STYLE_HORIZONTAL 横向进度条风格
上面是各种经常使用件控的事件监听的用使
①EditText(编辑框)的事件监听---OnKeyListener
②RadioGroup、RadioButton(单选按钮)的事件监听---OnCheckedChangeListener
③CheckBox(多选按钮)的事件监听---OnCheckedChangeListener
④Spinner(下拉列表)的事件监听---OnItemSelectedListener
⑤Menu(菜单)的事件处置---onMenuItemSelected
⑥Dialog(对话框)的事件监听---DialogInterface.OnClickListener()
http://blog.csdn.net/superjunjin/article/details/7855995
文章结束给大家分享下程序员的一些笑话语录:
手机终究会变成PC,所以ip会比wm更加畅销,但是有一天手机强大到一定程度了就会发现只有wm的支持才能完美享受。就好比树和草,草长得再高也是草,时间到了条件成熟了树就会窜天高了。www.ishuo.cn