android设置中的Preferencescreen用法介绍与分析
今天主要研究了一下设置中的Preferencescreen应用,它不仅可以作为设置界面显示,而且还能够启动activity,下面主要是对启动activity的介绍
1. Preferencescreen中启动activity
例如wireless_setting.xml中有如下片段
android:key="wifi_settings" android:title="@string/wifi_settings" android:summary="@string/wifi_settings_summary" > android:action="android.intent.action.MAIN" android:targetPackage="com.android.settings"//这里的2个都是包名 android:targetClass="com.android.settings.wifi.WifiSettings" />
其中com.android.settings是工程的包名,com.android.settings.wifi.WifiSettings是要启动的类。
一般情况下,这样就ok了,点击对应的Preference就能够启动对应的activity,然而仅仅这样有时这样,并不一定能够启动对应的activity,因为它与回调函数onPreferenceTreeClick有关,有时候我们会重写这个方法如:
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
if ( (preference == mAirplaneModePreference) &&
(Boolean.parseBoolean(
SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MO DE))) ) {
// In ECM mode launch ECM app dialog
startActivityForResult(
new
Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS, null), REQUEST_CODE_EXIT_ECM);
return true;
}
else {
// Let the intents be launched by the Preference manager
return false;
}
}
其中WirelessSetting.java中有如上函数,当返回值为true时,你怎么点击Preference
都不会跳转到activity的,只有等到它的返回值为false的时候,才可以正常跳转,因为点击某一个Preference的真正实现在Preference.java的performClick函数中如下:void performClick(PreferenceScreen preferenceScreen) {
if (!isEnabled()) {
return;
}
onClick();
if (mOnClickListener != null && mOnClickListener.onPreferenceClick(this)) { return;
}
PreferenceManager preferenceManager = getPreferenceManager();
if (preferenceManager != null) {
PreferenceManager.OnPreferenceTreeClickListener listener = preferenceManager
.getOnPreferenceTreeClickListener();
if (preferenceScreen != null && listener != null
&& listener.onPreferenceTreeClick(preferenceScreen, this)) { return;
}
}
if (mIntent != null) {
Context context = getContext();
context.startActivity(mIntent);
}
}
当点击某个Preference时的调用流程是AdapterView.performItemClick--》
PreferenceScreen.onItemClick--》Preference.performClick--》
PreferenceActivity.onPreferenceTreeClick,当onPreferenceTreeClick返回true的时候就直接return了,没有走下面启动activity的地方了,因此要使一个Preference 能够正常跳转到另外一个activity有两个条件,一是xml里面是否设置正确,第二是调用该xml的java类是否在onPreferenceTreeClick这个函数需要返回false。
https://www.doczj.com/doc/f66808901.html,/wujiangming/article/details/6218068
其实,还不是可以在onPreferenceTreeClick函数里面写startActivity呀
一,系统引导bootloader 加电,cpu执行bootloader程序,正常启动系统,加载boot.img【其中包含内核。还有ramdisk】 二,内核kernel bootloader加载kernel,kernel自解压,初始化,载入built-in驱动程序,完成启动。 内核启动后会创建若干内核线程,在后装入并执行程序/sbin/init/,载入init process,切换至用户空间(user-space) 内核zImage解压缩 head.S【这是ARM-Linux运行的第一个文件,这些代码是一个比较独立的代码包裹器。其作用就是解压Linux内核,并将PC指针跳到内核(vmlinux)的第一条指令】首先初始化自解压相关环境(内存等),调用decompress_kernel进行解压,解压后调用start_kernel启动内核【start_kernel是任何版本linux内核的通用初始化函数,它会初始化很多东西,输出linux版本信息,设置体系结构相关的环境,页表结构初始化,设置系 统自陷入口,初始化系统IRQ,初始化核心调度器等等】,最后调用rest_init【rest_init 会调用kernel_init启动init进程(缺省是/init)。然后执行schedule开始任务调度。这个init是由android的./system/core/init下的代码编译出来的,由此进入了android的代码】。 三,Init进程启动 【init是kernel启动的第一个进程,init启动以后,整个android系统就起来了】 init进程启动后,根据init.rc 和init.
Android开发技术讲义之启动另一个 Activity 紧接着上一个练习,我们为上一个练习app添加一些代码,使之当我们点击send 按钮的时候能够启动另一个Activity。 任务 在文本框中输入消息,点击Send按钮,消息会显示在第二个Activity中。 对发送按钮进行响应 1.在res/layout目录中,编辑activity_my.xml 2.在
该属性的属性值"sendMessage",是当点击按钮的时候系统调用的方法名 3.在java/com.mycompanu.myfirstapp目录中,打开MyActivity.java文件 4.在MyActivity类中,添加sendMessage()方法 java/com.mycompany.myfirstapp/MyActivity.java 为了匹配android:onClick属性值,该方法必须满足: ●是public ●返回值为void ●有且仅有一个View作为参数 创建一个Intent 1.在MyActivity.java中的sendMessage()方法中,创建一个Intent启动一个名 为DisplayMessageActivity的Activity java/com.mycompany.myfirstapp/MyActivity.java 注意:此时对DisplayMessageActivity的调用会显示出错,我们这时可以先忽略错误 这里,Intent构造方法用到了两个参数: ●Context作为第一个参数(这里是this,因为Activity是Context的子类) ●第二个参数为系统发送Intent的目标,为某应用组件的Class 2.在本文件的前面,引入Intent类: java/com.mycompany.myfirstapp/MyActivity.java
每个Androi d应用启动之后都会出现一个Spl ash启动界面,显示产品的LOGO、公司的LOGO或者开发者信息。如果应用程序启动时间比较长,那么启动界面就是一个很好的东西,可以让用户耐心等待这段枯燥的时间。 1.制作Splash界面 突出产品LOGO,产品名称,产品主要特色; 注明产品的版本信息; 注明公司信息或者开发者信息; 背景图片,亦可以用背景颜色代替; 2.处理后台资源 大多数的Splash界面都是会等待一定时间,然后切换到下一个界面; 其实,在这段时间里,可以对系统状况进行检测,比如网络是否通,电源是否充足; 或者,预先加载相关数据; 为了能让启动界面展现时间固定,需要计算执行以上预处理任务所花费的时间,那么:启动界面SLEEP的时间=固定时间-预处理任务时间; 思路有两个,一个是用两个Activity来做,一个用来做启动画面,另一个是主页面;还可以用一个Activity来做,程序启动时显现启动画面,当启动完成后,它会被隐藏来。 方法一:两个Activity,通过线程延迟指定的时间再执行Activity的跳转,我们需要建立两个Activity,一个是SplashActivity,用来做启动画面。另一个是HelloWo rldActivity。在这里只是说明如何来做启动画面,所以就不详细来完成Activity了。 核心代码: package com.demo.app; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; public class SplashActivity extends Activity { private final int SPLASH_DISPLAY_LENGHT = 6000; // 延迟六秒 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.doczj.com/doc/f66808901.html,yout.splash); new Handler().postDelayed(new Runnable() { public void run() { Intent mainIntent = new Intent(SplashActivity.this, HelloWorldActivity.class); SplashActivity.this.startActivity(mainIntent); SplashActivity.this.finish(); } }, SPLASH_DISPLAY_LENGHT); }
activiti流程开发指南 ?一、BPMN ?二、activiti主要接口 ?三、如何实现一个业务流程 ?四、如何管理所有流程与实例 ?五、开发流程 ?六、api 一、BPMN 1. 什么是BPMN 首先BPMN规范是由标准组织BPMI发布的.BPMN 1.0规范发布于2004年5月。此规范展示了BPMI组织两年多的努力成果。BPMN的主要目标就是要提供被所有业务用户理解的一套标记语言,包括业务分析者、软件开发者以及业务管理者与监察者。BPMN还将支持生成可执行的 BPEL4WS语言。所以,BPMN在业务流程设计与流程实现之间搭建了一条标准化的桥梁。 BPMN定义了业务流程图,其基于流程图技术,同时为创建业务流程操作的图形化模型进行了裁减。业务流程的模型就是图形化对象的网图,包括活动(也可以说工作)和定义操作顺序的流控制。 2. BPMN基础 业务流程图由一系列的图形化元素组成。这些元素简化了模型的开发,且业务分析者看上去非常熟悉。这些元素每个都有各自的特性,且与大多数的建模器类似。比如,活动是矩形,条件是菱形。应该强调的是:开发BPMN的动力就是为了在创建业务流程模型时提供一个简单的机制,同时又能够处理来自业务流程的复杂性。要处理这两个矛盾的需求的方法就是将标记的图形化方面组织分类为特定的类别。这里提供标记类别中的一小部分,以便业务流程图的读者可以简单地识别出元素的基本类型从而理解图形。以下是四种基本的类型: 1)流对象 2)连接对象 3)泳道
4)人工信息 BPMN2.0概要:https://www.doczj.com/doc/f66808901.html,/workclass/201206272.asp 二、activiti主要接口 ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine(); RuntimeService runtimeService = processEngine.getRuntimeService(); RepositoryService repositoryService = processEngine.getRepositoryService(); TaskService taskService = processEngine.getTaskService(); ManagementService managementService = processEngine.getManagementService(); IdentityService identityService = processEngine.getIdentityService(); HistoryService historyService = processEngine.getHistoryService(); FormService formService = processEngine.getFormService(); ProcessEngines.getDefaultProcessEngine()会在第一次调用时初始化并创建一个流程引擎,以后再调用就会返回相同的流程引擎。使用对应的方法可以创建和关闭所有流程引擎:ProcessEngines.init()和ProcessEngines.destroy()。 ProcessEngines会扫描所有activiti.cfg.xml和activiti-context.xml文件。对于activiti.cfg.xml文件,流程引擎会使用Activiti的经典方式构建: ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream (inputStream).buildProcessEngine(). 对于activiti-context.xml文件,流程引擎会使用Spring方法构建:先创建一个Spring的环境,然后通过环境获得流程引擎。
Android系统架构 Android目录结构 1.src目录 src目录中存放的是该项目的源代码,其内部结构会根据用户所声明的包自动组织,该
目录的组织方式为src/com/jiang/Main.java,程序员在项目开发过程中,大部分时间是对该目录下的源代码文件进行编写。 2.gen目录 该目录的文件是ADT自动生成的,并不需要人为地去修改,实际上该目录下只定义了一个R.java文件,该文件相当于项目的字典,项目中用户界面、字符串、图片、声音等资源都会在该类中创建其唯一的ID,当项目中使用这些资源时,会通过该类得到资源的引用。 3.Android2.2 该目录中存放的是该项目支持的JAR包,同时还包含项目打包时需要的META-INF目录。 4.assets目录 该目录用于存放项目相关的资源文件,例如文本文件等,在程序中可以使用”getResources.getAssets().open(“text.txt”)”得到资源文件的输入流InputStream对象。 5.res目录 该目录用于存放应用程序中经常使用的资源文件,包括图片、声音、布局文件及参数描述文件等,包括多个目录,其中以drawable开头的三个文件夹用于存储.png、.9.png、.jpg 等图片资源。layout文件夹存放的是应用程序的布局文件。raw用于存放应用程序所用到的声音等资源。value存放的则是所有XML格式的资源描述文件,例如字符串资源的描述文件strings.xml、样式的描述文件style.xml、颜色描述文件colors.xml、尺寸描述文件dimens.xml,以及数组描述文件arrays.xml等。 6.AndroidManifest.xml文件 该文件为应用程序定义了全局的配置信息。这个文件列出了应用程序所提供的功能,包括四大组件、版本、权限等等。在这个文件中,你可以指定应用程序使用到的服务(如电话服务、互联网服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Activity。 android:versionCode是给设备程序识别版本(升级)。 android:versionName是给用户看的。 7.default.properties文件 该文件为项目的配置文件,不需要认为改动,系统会自动为其进行管理,其中主要描述了该项目的版本等信息。
Android讲解 第一讲 1.Android概述 2.开发环境的搭建 3.创建第一个Android应用程序 4.Android程序的结构分析 1. src 毫无疑问,src 目录是放置我们所有Java 代码的地方,它在这里的含义和普通Java项目下的src 目录是完全一样的,展开之后你将看到我们刚才创建的HelloWorldActivity文件就在里面。 2. gen 这个目录里的内容都是自动生成的,主要有一个R.java 文件,你在项目中添加的任何资源都会在其中生成一个相应的资源id。这个文件永远不要手动去修改它。 3. assets 这个目录用得不多,主要可以存放一些随程序打包的文件,在你的程序运行时可以动态读取到这些文件的内容。另外,如果你的程序中使用到了WebView 加载本地网页的功能,所有
网页相关的文件也都存放在这个目录下。 4. bin 这个目录你也不需要过多关注,它主要包含了一些在编译时自动产生的文件。其中会有一个你当前项目编译好的安装包,展开bin 目录你会看到HelloWorld.apk,把这个文件拷到手机上就可以直接安装了。 5. libs 如果你的项目中使用到了第三方Jar 包,就需要把这些Jar 包都放在libs 目录下,放在这个目录下的Jar 包都会被自动添加到构建路径里去。你可以展开上图中Android 6.0、Android Private Libraries、Android Dependencies 这些库,其中显示的Jar 包都是已经被添加到构建路径里的。 6. res 这个目录下的内容就有点多了,简单点说,就是你在项目中使用到的所有图片、布局、字符串等资源都要存放在这个目录下,前面提到的R.java 中的内容也是根据这个目录下的文件自动生成的。当然这个目录下还有很多的子目录,图片放在drawable 目录下,布局放在layout 目录下,字符串放在values 目录下,所以你不用担心会把整个res 目录弄得乱糟糟的。 7. AndroidManifest.xml 这是你整个Android 项目的配置文件,你在程序中定义的所有四大组件都需要在这个文件里注册。另外还可以在这个文件中给应用程序添加权限声明,也可以重新指定你创建项目时指定的程序最低兼容版本和目标版本。由于这个文件以后会经常用到,我们用到的时候再做详细说明。 8. project.properties 这个文件非常地简单,就是通过一行代码指定了编译程序时所使用的SDK 版本。我们的HelloWorld 项目使用的是API 14,你也可以在这里改成其他版本试一试。 详解项目中的资源 所有以drawable 开头的文件夹都是用来放图片的,所有以values 开头的文件夹都是用来放字符串的,layout 文件夹是用来放布局文件的,menu 文件夹是用来放菜单文件的。怎么样,是不是突然感觉清晰了很多?之所以有这么多drawable 开头的文件夹,其实主要是为了让程序能够兼容更多的设备。在制作程序的时候最好能够给同一张图片提供几个不同分辨率的副本,分别放在这些文件夹下,然后当程序运行的时候会自动根据当前运行设备分辨率的高低选择加载哪个文件夹下的图片。当然这只是理想情况,更多的时候美工只会提供给我们一份图片,这时你就把所有图片都放在drawable-hdpi 文件夹下就好了。
Activity中 在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。这需要为Activity配置特定的加载模式,而不是使用默认的加载模式。 加载模式分类及在哪里配置 Activity有四种加载模式: ?standard ?singleTop ?singleTask ?singleInstance 设置的位置在AndroidManifest.xml文件中activity元素的android:launchMode属性:
A n d r o i d应用程序绑定服务b i n d S e r v i c e 的过程源代码分析
Android应用程序组件Service与Activity一样,既可以在新的进程中启动,也可以在应用程序进程内部启动;前面我们已经分析了在新的进程中启动Service的过程,本文将要介绍在应用程序内部绑定Service的过程,这是一种在应用程序进程内部启动Service的方法。 在前面一篇文章Android进程间通信(IPC)机制Binder简要介绍和学习计划中,我们就曾经提到,在Android系统中,每一个应用程序都是由一些Activity和Service组成的,一般Service运行在独立的进程中,而Activity有可能运行在同一个进程中,也有可能运行在不同的进程中;在接下来的文章中,Android系统在新进程中启动自定义服务过程(startService)的原理分析一文介绍了在新的进程中启动Service的过程,Android应用程序启动过程源代码分析一文介绍了在新的进程中启动Activity的过程,而Android应用程序内部启动Activity过程(startActivity)的源代码分析一文则介绍了在应用程序进程内部启动Activity的过程;本文接过最后一棒,继续介绍在应用程序进程内部启动Service的过程,这种过程又可以称在应用程序进程内部绑定服务(bindService)的过程,这样,读者应该就可以对Android应用程序启动Activity和Service有一个充分的认识了。 这里仍然是按照老规矩,通过具体的例子来分析Android应用程序绑定Service的过程,而所使用的例子便是前面我们在介绍Android系统广播机制的一篇文章Android系统中的广播(Broadcast)机制简要介绍和学习计划中所开发的应用程序Broadcast了。 我们先简单回顾一下这个应用程序实例绑定Service的过程。在这个应用程序的MainActivity的onCreate函数中,会调用bindService来绑定一个计数器服务CounterService,这里绑定的意思其实就是在MainActivity内部获得CounterService的接口,所以,这个过程的第一步就是要把CounterService 启动起来。当CounterService的onCreate函数被调用起来了,就说明CounterService已经启动起来了,接下来系统还要调用CounterService的onBind函数,跟CounterService要一个Binder对象,这个Binder对象是在CounterService内部自定义的CounterBinder类的一个实例,它继承于Binder类,里面实现一个getService函数,用来返回外部的CounterService接口。系统得到这个Binder对象之后,就会调用MainActivity在bindService函数里面传过来的ServiceConnection实例的onServiceConnected函数,并把这个Binder对象以参数的形式传到onServiceConnected函数里面,于是,MainActivity就可以调用这个Binder对象的getService函数来获得CounterService的接口了。 这个过程比较复杂,但总体来说,思路还是比较清晰的,整个调用过程为MainActivity.bindService->CounterService.onCreate->CounterService.onBind- >MainActivity.ServiceConnection.onServiceConnection->CounterService.CounterBinder.getService。下面,我们就先用一个序列图来总体描述这个服务绑定的过程,然后就具体分析每一个步骤。
Activity四种启动模式 一、启动模式介绍 启动模式简单地说就是Activity启动时的策略,在Android Manifest.xml中的标签的android:launchMode属性设置; 启动模式有4种,分别为standard、singleTop、singleTask、singleInstance; 讲解启动模式之前,有必要先讲解一下“任务栈”的概念; 任务栈 每个应用都有一个任务栈,是用来存放Activity的,功能类似于函数调用的栈,先后顺序代表了Activity的出现顺序;比如Activity1-->Activity2-->Activity3,则任务栈为: 二、启动模式 (1)standard:每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈;
(2)singleTop:如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例; (3)singleTask:如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop;
(4)singleInstance:如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例;
SingTask的应用: 可以用来退出整个应用。 将主Activity设为SingTask模式,然后在要退出的Activity中转到主Activity,然后重写主Activity的onNewIntent函数,并在函数中加上一句finish。 附: 退出单个Activity方法: 调用finish 杀死该进程:killprocess(Process.mId) 终止正在运行的虚拟机:system.exit() 退出整个应用: 制造抛异常导致整个程序退出 将所有的activity放入到一个list中,然后在需要退出的时候,将所有的activity,finish掉 通过广播来完成退出功能 通过广播来完成退出功能,具体实现过程是这样的:在每个Activity创建时(onCreate时)给Activity注册一个广播接收器,当退出时发送该广播即可。大概的代码如下: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); IntentFilter filter = new IntentFilter(); filter.addAction("finish");
EOS工作流引擎工作原理 作者:Gocom注册用户dogreet(李国生) 1. 工作流基础知识 ……略 2. EOS工作流引擎工作原理 本文是我在工作之余写的一点我对EOS工作流的了解,我的理解不一定全是对的,可能会与引擎的真正的面目有出入。所以只能提供给大家一点参考。 2.1. EOS工作流引擎核心调度算法 EOS工作流最重要的组成部分是它的核心调度算法,在我们没有深入研究它的工作原理之前我们认为它的工作原理是在工作项,活动和流程实例对象上加了一些标志位来驱动流程的运转。认为其引擎完全是个由数据库来驱动流程的引擎(安徽二期的工作流平台好象就是以库表来驱动流程的运转),其实它是由事件来驱动流程运转的引擎,数据库只是把引擎运转前后的状态持久化。在我近来在工作之余对其引擎的工作原理进行跟踪才弄明白在EOS帮助文档上介绍的“事件驱动”的工作流引擎。 2.1.1. EOS工作流引擎的事件类型
以上的每个事件都是原子的不可分割的。其中一系列事件的集合通过EOS引擎事件调度机制实现我们平时在工作中经常遇到的如启动流程,结束工作项等等。(在事件类型类中EOS定义了29种事件,但在事件工厂类中EOS定义了26种类型。) 1.1.1. EOS工作流事件调度机制 EOS事件的调度服务是在工作流引擎初始化时通过服务工厂类加载到内存中(ServiceFactory.initEventService())。用户可以通过服务工厂类(ServiceFactory)取得JVM的唯一事件服务实例进行事务调度。所有的事件程序入口都是事件类(EventService),这个类其实是个接口,其有两个实现类,一个是单线程的实现类SingleThreadEventService (在实现代码中其实不是单线程,而是单例的对象),一个是多线程的实现类MulThreadThreadSvc,(其实现方式不在这里详细说明,多线程的类后面又跟了一大堆的线程池实现代码),在事件服务类中有一个属性类是WFEventDisposer,这个类包含了事
Android开发历程_3(Activity生命周期) Activity中有7个与生命周期有关的函数。其中onCreated()是activity第一次被启动时执行的,主要是初始化一些变量,onRestart()是当前activity重新被启动时调用的;绑定一些监听器等;onStart()是activity界面被显示出来的时候执行的;onResume()是当该activity与用户能进行交互时被执行;onPause()是另一个activity被启动,当前的activity就被暂停了,一般在该函数中执行保存当前的数据;onStop()表示另一个activity被启动完成时,当前activity对用户同时又完全不可见时才调用的;onDestroy()是退出当前activity时调用的,当然如果程序中调用finish()或者说android系统当前资源不够用时就会被调用。 当用多个activity在执行时,这时候android系统会自动将这些activity压入栈中并且总是显示最顶的那个activity,这个栈在android叫做task,但是这个栈只支持压入和弹出操作,不支持排序插入等操作。 Activity的7个生命周期函数中的onStop()函数被调用时是在其对应的activity被另外的activity完全遮挡的时候,如果只有部分遮挡,则不会被调用。部分遮挡一般是以消息activtiy的形式出现,这个只需在AndroidManifest.xml中将其对于的activity的主题设置theme中更改即可。 这7个周期函数,当系统资源不够时,其中onPause(),onStop(),onDestroy()是有可能被系统kill掉的,但其它4个是不会被kill掉。 参考资料为mars老师的资料。 官方给出关于这7个生命周期的图如下:
软外学院过程化第三次考核试卷 科目:Android应用开发命题教师:李会平班级:嵌入式11-1 姓名:学号:成绩: 一、填空(每空2分,共30分) 1.android中常用的四个布局是_线性布局相对布局、绝对布局、表格布局。 2. android 的四大组件是Activity、Service(没有UI)、Content Provider(内容提供者)、Brodcast Receiver(广播 intent一种中转的控件)。 3. android 中service的实现方法是OnStart()、OnBound()。 4.activity一般会重载7个方法用来维护其生命周期, 除了OnCreate(),onStart(), onDestory()方法外,还有哪些方法onResume()、onPause()、onStop()、onRestart(). 5.当启动一个新的Activity时,要用那个组件启动Intent. 二.选择题(每题2分,共30分) 1.android是如何组织Activity的( A ) A、以栈(先进后出)的方式组式Activity B、以队列的方式组织Activity C、以树形方式组织Activity D、以链式方式组织Activity。 2.onPause什么时候调用( C ) A.当界面启动时 B.当onCreate方法被执行之后 C.当界面被隐藏时 D.当界面重新显示时 3.在Activity中,如何获取service对象(A) A.可以通过直接实例化得到。 B.可以通过绑定得到。 C.通过startService() D.通过getService()获取。 4. 创建Menu需要重写的方法是( C ) A、onOptionsCreateMenu(Menu menu) B、onOptionsCreateMenu(MenuItem menu) C、onCreateOptionsMenu(Menu menu) D、onCreateOptionsMenu(MenuItem menu) ??5. 关于适配器的说法正确的有( B ) A.它主要是用来存储数据 B.它主要用来把数据绑定到组件上 C.它主要用来解析数据 D.它主要用来存储xml数据 6.关于Activity说的法不正确的是( C ) A. Activity是为用户操作而展示的可视化用户界面 B. 一个应用程序可以有若干个Activity C. Activity可以通过一个别名去访问 D. Activity可以表现为一个漂浮的窗口
Stopping and Restarting an Activity 停止与重启Activity 在activity生命周期中,恰当的停止与重启activity是很重要的,这样能确保用户感知到程序的存在并不会丢失他们的进度。在下面一些关键的场景中会涉及到停止与重启: 用户打开“最近使用的程序(Recent Apps)”的菜单并从当前app切换到另外一个app,这个时候先前的app是被停止的。如果用 户通过“主屏幕加载图标(Home screen launcher icon”或“最近使用的程序(Recent Apps)”重新回到这个app,则activity会重启。 用户在当前的app里面执行启动一个新的activity的操作时,当前activity会在第二个activity被创建后停止。如果用户点 击back按钮,之前的activtiy会被重启。 用户在运行app时接受到一个来电通话。 Activity类提供了onStop()方法与onRestart()方法用于在activity停止与重启时进行调用。和暂停状态时部分阻塞用户接口不同,停止状态时UI不可见并且用户的焦点转移到另一个activity中。 注意:因为系统在Activity停止时会在内存中保存了Activity实例,所以很多时候不需要实现onStop()方法与onRestart()方法,甚至是onStart()方法。因为大多数的Activity相对比较简单,Activity会自动正常停止与重启,只需要使用onPause()来停止正在运行的动作并断开系统资源链接。
如图1所示:当用户离开Activity时系统会调用onStop()来停止Activity (1)。这个时候如果用户返回,系统会调用onRestart()(2), 紧接着会调用onStart()(3)与onResume()(4)。需要注意的是:无论什么原因导致Activity停止,系统总是会在onStop()之前调用onPause()方法。 停止Activity 当activity调用onStop()方法时,该activity不再可见并且应该释放所有不再需要的资源。一旦activity停止了,系统可能会摧毁activity的实例以回收内存,甚至,系统会不执行activity的onDestroy()回调方法而直接杀死你的app进程, 因此需要使用onStop()来释放资源,从而避免内存泄漏。 尽管onPause()方法是在onStop()之前调用,通常应该使用onStop()来执行CPU密集型的关闭操作,例如把数据写入数据库。 例如,下面是一个在onStop()的方法里面保存笔记草稿到永久存储介质的示例: @Override
AndEngine游戏引擎讲解 AndEngine是一款以OpenGL ES方式进行画面渲染的2D游戏引擎,可以运行在支持Android 1.6及以上版本的系统当中。它在默认情况下已经可以支持中文,采用屏幕坐标系绘也更符合一般Android绘图习惯。 AndEngine引擎基础构成如下图所示: 如何使用AndEngine AndEngine的基本运行原理 解读AndEngine源码后我们可以发现,AndEngine除了采取低耦合、高内聚的框架策略细分引擎模块,使用OpenGLES进行游戏渲染之外;该引擎还以双线程方式 具体地说,其绘图线程位于AndEngine提供的GLSurfaceView内部类GLThread(在AndEngine的org.anddev.andengine.opengl.view包下,非Android默认的 当AndEngine进行游戏绘图时,游戏业务线程会通过wait方式锁定,而当游戏业务处理时,也会以同样的手段锁定绘图线程,二者间具体交互关系由Engine类
另外,或许是考虑到持续双线程运行电量消耗较大的缘故,AndEngine默认情况下要求用户启动PowerManager进行电源管理,故此需要
Activity创建: 1.创建一个class继承Activity或者Activity的子孙类。 2.在清单文件中声明Activity 3.在创建的类中。重写onCreate方法,在其中添加setContentView方法指定activity的界 面 Activity的结束: 1.点击back键结束activity 2.调用finish方法结束activity 3.异常退出activity 4.通过System.exit()退出activity 一、activity的生命周期 1.oncreate:activity在创建时执行 2.onstart:activity从不可见到可见的时候执行 3.onresume:activity可见,获取到activity焦点时候执行 4.onpause:activity可见,失去焦点的时候执行 5.onstop:activity从可见到不可见的时候执行 6.ondestory:activity销毁的时候执行 7.onrestart:activity从stop状态从新启动时执行
二、activity的启动方式(2种,通过intent实现) 1.显示:直接指定包名和类名启动 2.隐式:通过intent-filter匹配action/category/data,来启动activity 想隐式启动一个activity,必须在清单文件中对这个Activity指定一个intent-filter。 intent-filter中必须包含:action和category PS:匹配方式参考intent笔记 显示和隐式的区别: 1.显示启动:指定一个特定的人去做特定的事情 2.隐式启动:指定特定对的事情,完成事情的人不确定(当可选人唯一的时候,和显 示一样) 3.显示启动不能夸应用启动,隐式启动可以完成夸应用启动(隐式启动是根据清单文 件的信息来查询的,清单文件都是托管给系统,作为系统是有跨进程能力的,本身 应用是没有跨进程能力的) 三、activity的启动模式(4种) 1.standard:每次启动activity都在task栈中新建一个空间存放启动的activity 2.singleTop:当且仅当要启动的activity在栈顶时,不创建新的空间存,直接使用栈顶 的空间 3.singleTask:当启动一个被指定为singleTask的activity时,系统首先检测当前的task 栈中有没有这个activity,如果没有,新建一个空间存放。如果存在,像弹夹一样,先移除所有在其之上的activity,然后显示栈顶 4.singleInstance:当启动一个被声明为singleInstance的activity是,系统会创建一个 新的task来唯一存放这个activity 四、activity的数据传递(通过intent实现) 1.启动传递 2.结束传递
Activiti数据表结构和核心对象关系 西安创富电子科技有限公司 二〇一三年九月
版本历史
目录 1ACTIVITI数据库表结构--------------------------------------------------------------------------------------- 4 1.1 数据库表名说明 ---------------------------------------------------------------------------------------- 4 1.2 数据库表结构 ------------------------------------------------------------------------------------------- 4 2ACTIVITI中主要对象的关系 -------------------------------------------------------------------------------- 5
1Activiti数据库表结构 1.1数据库表名说明 Activiti工作流总共包含23张数据表,所有的表名默认以“ACT_”开头。并且表名的第二部分用两个字母表明表的用例,而这个用例也基本上跟Service API匹配。 ◆ACT_GE_* : “GE”代表“General”(通用),用在各种情况下; ◆ACT_HI_*: “HI”代表“History”(历史),这些表中保存的都是历史数 据,比如执行过的流程实例、变量、任务,等等。当系统中配置history的信息记录级别为“none”时,这一类表也可以不用; ◆ACT_ID_* : “ID”代表“Identity”(身份),这些表中保存的都身份信 息,如用户和组以及两者之间的关系。如果Activiti被集成在某一系统当中的话,这些表可以不用,可以直接使用现有系统中的用户或组信息; ◆ACT_RE_* : “RE”代表“Repository”(仓库),这些表中保存一些‘静 态’信息,如流程定义和流程资源(如图片、规则等); ◆ACT_RU_*: “RU”代表“Runtime”(运行时),这些表中保存一些流程实 例、用户任务、变量等的运行时数据。Activiti只保存流程实例在执行过程中的运行时数据,并且当流程结束后会立即移除这些数据,这是为了保证运行时表尽量的小并运行的足够快; 1.2数据库表结构 Activiti数据表清单: