Activity的启动
Activity的启动只有两种方式,一种是用户点击应用程序图标,Launcher会启动应用程序的主Activity,主Activity即为在AndroidManifest.xml中定义为LAUNCHER category的
Activity;另一种是在应用程序起来后通过调用startActivity(Intent intent)接口启动新的Activity,其中intent指定启动的Activity action name,这个action name同样在AndroidManifest.xml指定,并由应用框架层的ActivityManagerService负责维护。第二种方法可以启动不同apk的Activity。
Activity的生命周期
主要有两种情况
打开应用时:先后执行了onCreate()->onStart()->onResume三个方法 应用程序结束时:先后调用onPause()->onStop()->onDestory()三个方法
详细介绍一下这几个方法中系统在做什么以及我们应该做什么: onCreate:
在这里创建界面,做一些数据的初始化工作。 onStart:
到这一步变成用户可见不可交互的。 onResume:
变成和用户可交互的,(在activity 栈系统通过栈的方式管理这些个Activity的最上面,运行完弹出栈,则回到上一个Activity) 。
onPause:
到这一步是可见但不可交互的,系统会停止动画等消耗CPU的事情从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在onResume里读出来,注意:这个方法里做的事情时间要短,因为下一个activity不会等到这个方法完成才启动。
onstop:
变得不可见,被下一个activity覆盖了 onDestroy:
这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方法或者是系统为了节省空间将它暂时性的干掉,可以用isFinishing()来判断它,如果你有一个Progress Dialog在线程中转动,请在onDestroy里把他cancel掉,不然等线程结束的时候,调用Dialog的cancel方法会抛异常的。
通信使者Intent
Android应用的各项组件之间的通讯,通过Intent(意图)进行交流,这个是Android架构的松耦合的精髓部分,大大提高了组件的复用性。当扔出一个Intent,系统通过什么来判断谁来接受这个Intent呢?有两种方法: 第一种直接指定某个类为接受者,如下:
Intent intent = new intent(this. MyActivity.class);
Intent.getExtras().putString(“id”, “1”); startActivity(intent);
第二种是根据AndroidManiFest.xml中的intent-filter配置。
Handler机制的原理
Android提供了Handler和Looper来满足线程间的通信。Handler实行先进先出的原则。Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)。
Looper:一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。 Handler:可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper从Message Queue取出所送来的消息。 Message Queue:用来存放线程放入的消息。 线程:UI thread通常就是main thread,而android启动程序时会替他建立一个Message Queue。
定时Timer的使用
很多时候,我们需要使用定时器,以便每隔一段时间做相应的事情,定时器其中一种实现: 1. protected Timer timer;
protected TimerTask timerTask;
2. timer = new Timer();
timerTask = getTimerTask();
timer.schedule(timerTask, 10, 1000);
3. private TimerTask getTimerTask() {
timerTask = new TimerTask() { @Override
public void run() {
myHandler.sendEmptyMessage(msg_key); } };
return timerTask; }
模块交互 TVOS万能接口
万能接口可以实现从App层传字符串到Supernova层,中间通过JNI调用和Binder通信实现。App发送数据,Supernova接收数据,并做相应动作。
通用格式: App端发送:
shortsourcestatus[] = null; try// michael_ktc {
Log.i(\, \); sourcestatus = TvManager
.setTvosCommonCommand(\); } catch (TvCommonException e) { // TODO Auto-generated catch block e.printStackTrace();
}
Supernova端接收:
\\Supernova\\projects\\msrv\\dvb\\base\\src\\MSrv_Control_DVB.cpp
发送端跟接收端字符串要相同,才能匹配。
JNI
JNI是Java Native Interface的缩写,中文为JAVA本地调用,即该方法允许Java代码调用其他语言写的代码。
通用书写步骤:
1. 编写java程序,声明native方法,并加载so本地库; 2. 编译上述java程序;
3. 生成头文件,声明本地方法;