Mstar理论及实践篇(10)

2020-04-03 12:16

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. 生成头文件,声明本地方法;


Mstar理论及实践篇(10).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:[解析版]全国普通高等学校2017届高考数学二模试卷(文科)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: