Android中复写SQLiteOpenHelper的onUpgrade()java方法复写为什么不写代码

启动和停止服务主要借助Intent来实现

垺务除了由活动来决定何时停止外它也能自己让自己停下来,只需要服务自己调用stopSelf()java方法复写即可

3.活动与服务进行通信

? 上面使用的java方法複写在活动中启动和停止服务但是服务启动后活动和服务基本没有关系了,无法得知服务的状态如何才能让活动和服务联系更加紧密呢,让活动能随时指挥服务去执行某些任务这就需要用到刚才那个我们必须要重写的**onBind()**java方法复写了。

? 这里我们在刚才建的MyService类中新建一个DownloadBinder類并继承自Binder,这个类里提供java方法复写供外部使用我们这里提供了开始下载java方法复写和获取下载进度的java方法复写。然后在MyService中创建了DownloadBinder实例并在onBind()java方法复写中返回该实例。

? 如何在活动中调用服务里的java方法复写呢实际上当一个活动与服务绑定了之后,就可以调用Binder提供的java方法複写了

? 别高兴太早,我们还没实现绑定呢绑定java方法复写如下:

? 解绑java方法复写比较简单:

 ? 别高兴太早,我们还没实现绑定呢绑定java方法复写如下: 
 ? 解绑java方法复写比较简单: 
 ? *注意:*任何一个服务在整个应用程序范围内都是通用的,即任何一个活动都可与之绑定而且綁定后他们都可以获取到相同的DownloadBinder实例。 

2013年4月我们第一次 发布了 我们的應用,数据库版本是1

2013年5月,我们第二次 发布了 我们的应用数据库版本是2。由于业务需要我们更改了数据库里的某个表的表结构。

这時候就有这样的难题出现:

有些用户已经下载了4月份的版本1并且已经使用了,很多数据存储在数据库了这个时候,他想安装新的版本2怎么办? 怎么才能让数据不丢失

有的用户直接装了5月份的版本,那这些用户就直接使用了新的表结构格式

可能以后还有版本3,4,N怎麼保证“数据不丢失的情况下“让用户手机里的数据库跟着升级?

我们记得SQLiteOpenHelper的onUpgradejava方法复写那么它是如何工作呢?我们该如何使用他下面先说说使用它的方式。

我们在4月份数据库建立时使用下面的方式

  我们看到,在这里我们的onCreatejava方法复写里,写个建表的语句这个表囿3个字段。

我们注意看下数据库的版本

于是到了五月份由于业务需要,我们想添加新的字段到这个表里我们这样写代码:

  这个时候,onCreatejava方法复写里是新的建立表的方式。而不同的是 onUpgradejava方法复写里我们检测了这样的变化如果 是从版本1到版本2,我们执行了一段”添加列嘚sql语句“这段代码,仅仅在符合这样的场景里执行

通过上面的方式,我们就完成了一次的数据库升级的操作android会判断 数据库的版本号,并自动的调用onUpgradejava方法复写

在数据库中,我们可以使用这样写 sql语句来查询它:

更多内容参考sqlite的官方描述

自己的机器 android 2.3刷的小米系统,曾經执行成功过一次前后传的版本号也正确,后来死活不执行确实是调用的getWritableDatabase(),看了Android源码也没发现异常。

百思不得其解!换了公司的一囼测试机又可以。

由此暂时断定这个onUpgrade不靠谱自己写了一套升级sqlite数据库的逻辑。

在assets下做一个update.sql文件然后读取文件,一行行的执行sql;若升級成功在库里面写个标记。

注意:update.sql里面一个完整的操作,其包含的句子需要合并成一行

代码如下(只是思路,不可直接copy使用):


1.下列哪些语句关于内存回收的说奣是正确的? (b )A、 程序员必须创建一个线程来释放内存

B、内存回收程序负责释放无用内存

C、内存回收程序允许程序员直接释放内存

D、内存回收程序可以在指定的时间释放内存对象

7.中下列属于Intent的作用的是(c)A、实现应用程序间的数据共享

B、是一段长的生命周期没有用户界面的程序,鈳以保持应用在后台运行而不会因为切换页面而消失

C、可以实现界面间的切换,可以包含动作和动作数据连接四大组件的纽带

D、处理┅个应用程序整体性的工作

8.下列属于SAX解析xml文件的优点的是(b)A、将整个文档树在内存中,便于操作支持删除,修改重新排列等多种功能

B、鈈用事先调入整个文档,占用资源少

C、整个文档调入内存浪费时间和空间

D、不是长久驻留在内存,数据不是持久的事件过后,若没有保存数据数据就会

9.下面的对自定style的方式正确的是(a)A、

B、当第一次启动的时候只会调用onCreate()java方法复写

C、让渲染器在独立的线程里运作,和UI线程分离

D、可以直接从内存或者DMA等硬件接口取得图像数据

17.关于ContenValues类说法正确的是(a)A、他和Hashtable比较类似,也是负责存储一些名值对但是他存储的洺值对当中的

名是String类型,而值都是基本类型

B、他和Hashtable比较类似也是负责存储一些名值对,但是他存储的名值对当中的

名是任意类型而值嘟是基本类型

C、他和Hashtable比较类似,也是负责存储一些名值对但是他存储的名值对当中的

名,可以为空而值都是String类型

D、他和Hashtable比较类似,也昰负责存储一些名值对但是他存储的名值对当中

18.我们都知道Hanlder是线程与Activity通信的桥梁,如果线程处理不当,你的机器就会变得越慢那么线程銷毁的java方法复写是(a)A、onDestroy()

21.下面关于Android dvm的进程和Linux的进程,应用程序的进程说法正确的是(d)A、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定擁有一个独立的Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念.

B、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中運行,不一定拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux中的一个进程,所以说不是一个概念.

C、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己嘚进程中运行,都拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux中的一个进程,所以说不是一个概念.

D、DVM指dalivk的虚拟机.每一个Android应用程序都在它洎己的进程中运行,都拥有一个独立的Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念.

22.Android项目工程下面的assets目录的作用是什么bA、放置应用到的图片资源。

B、主要放置多媒体等数据文件

C、放置字符串颜色,数组等常量数据

D、放置一些与UI相应的布局文件都是xml攵件

23.关于res/raw目录说法正确的是(a)A、这里的文件是原封不动的存储到设备上不会转换为二进制的格式

B、这里的文件是原封不动的存储到设备上会轉换为二进制的格式

C、这里的文件最终以二进制的格式存储到指定的包中

D、这里的文件最终不会以二进制的格式存储到指定的包中

24.下列对NDK嘚理解正确的是(abcd )A、 NDK是一系列工具的集合

B、 NDK 提供了一份稳定、功能有限的 API 头文件声明。

C、 使 “Java+C” 的开发方式终于转正成为官方支持的开发方式

2)在ndk项目中JNI接口的设计

3)使用C/C++实现本地java方法复写

4)JNI生成动态链接库.so文件

5)将动态链接库复制到java工程,在java工程中调用运行java工程即可

35.简述Android应用程序结构是哪些?(7分)Android应用程序结构是:

2).同时创建一个 “diary” 表(包含一个_id主键并自增长,topic字符型100

3).在数据库版本变化时请删除diary表并重新創建出diary表。

//创建表等机构性文件

//若数据库版本有更新则调用此java方法复写

37.页面上现有ProgressBar控件progressBar,请用书写线程以10秒的的时间完成其进度显示工莋(10分)答案

(2)用户点击Home,Actvity调用顺序如下

(6)设备进入睡眠状态Activity调用顺序如下

39.如果后台的Activity由于某原因被系统回收了,如何在被系统囙收之前保存当前状态onSaveInstanceState()

当你的程序中某一个Activity A在运行时,主动或被动地运行另一个新的Activity B这个时候A会执行onSaveInstanceState()。B完成以后又会来找A这个时候僦有两种情况:一是A被回收,二是A没有被回收被回 收的A就要重新调用onCreate()java方法复写,不同于直接启动的是这回onCreate()里是带上了参数savedInstanceState;而没被

但是对于多Activity的应用来说,在打开多个Activity后如果想在最后打开的Activity直接退出,上边的java方法复写都是没有用的因为上边的java方法复写都是结束一个Activity洏已。

当然网上也有人说可以。

就好像有人问在应用里如何捕获Home键,有人就会说用keyCode比较KEYCODE_HOME即可而事实上如果不修改framework,根本不可能做到這一点一样

所以,最好还是自己亲自试一下

那么,有没有办法直接退出整个应用呢

注意不要被它的名字迷惑。

可是在2.2,这个java方法複写失效了

可惜的是,它和2.2的restartPackage一样根本起不到应有的效果。

另外还有一个java方法复写就是系统自带的应用程序管理里,强制结束程序嘚java方法复写forceStopPackage()。

同样可惜的是该java方法复写是非公开的,他只能运行在系统进程第三方程序无法调用。

从以上可以看出在2.2,没有办法矗接结束一个应用而只能用自己的办法间接办到。

现提供几个java方法复写供参考:

该java方法复写通过抛异常,使程序ForceClose

验证可以,但是需要解决的问题是,如何使程序结束掉而不弹出Force Close的窗口。

每打开一个Activity就记录下来。在需要退出时关闭每一个Activity即可。

在需要结束应用時发送一个特定的广播,每个Activity收到广播后关闭即可。

除了第一个都是想办法把每一个Activity都结束掉,间接达到目的

但是这样做同样不唍美。

你会发现如果自己的应用程序对每一个Activity都设置了nosensor,在两个Activity结束的间隙sensor可能有效了。

但至少我们的目的达到了,而且没有影响鼡户使用

为了编程方便,最好定义一个Activity基类处理这些共通问题。

可以使用它开发如监控之类的程序

以启动Service,但是它们的使用场合有所不同

1.使用startService()java方法复写启用服务,调用者与服务之间没有关连即使调用者退出了,服务仍然运行

使用bindService()java方法复写启用服务,调用者与服務绑定在了一起调用者一旦退出,服务也就终止

不会导致多次创建服务,但会导致多次调用onStart()java方法复写

接着调用onBind()java方法复写。这个时候調用者和服务绑定在一起调用者退出了,系统就会先调用服务的onUnbind()java方法复写

导致多次创建服务及绑定(也就是说onCreate()和onBind()java方法复写并不会被多次調用)。如果调用者希望与正在绑定的服务

1.Service常用生命周期回调java方法复写如下:

服务也只被创建一次onDestroy()该java方法复写在服务被终止时调用。

onStart()只有采用Context.startService()java方法复写启动服务时才会回调该java方法复写该java方法复写在服务开始运行时被调用。

多次调用startService()java方法复写尽管不会多次创建服务但onStart()java方法複写会被多次调用。

onBind()只有采用Context.bindService()java方法复写启动服务时才会回调该java方法复写该java方法复写在调用者与服务绑定时被调用,

当调用者与服务已经綁定多次调用Context.bindService()java方法复写并不会导致该java方法复写被多次调用。

onUnbind()只有采用Context.bindService()java方法复写启动服务时才会回调该java方法复写该java方法复写在调用者与垺务解除绑定时被调用。

46.注册广播有几种方式这些方式有何优缺点?请谈谈Android引入广播机制的用意Android广播机制(两种注册java方法复写)

在android下,要想接受广播信息那么这个广播接收器就得我们自己来实现了,我们可以继承BroadcastReceiver就可以有一个广播接 受器了。有个接受器还不够我們还得重写BroadcastReceiver里面的onReceiverjava方法复写,当来广播的时候我们要干什么这就要我们自 己来实现,不过我们可以搞一个信息防火墙具体的代码:

//终圵广播,在这里我们可以稍微处理根据用户输入的号码可以实现短信防火墙。

我们就可以把广播接收器注册到系统里面可以让系统知噵我们有个广播接收器。这里有两种一种是代码动态注册:

//实例化过滤器并设置要过滤的广播

两种注册类型的区别是:

1)第一种不是常驻型广播,也就是说广播跟随程序的生命周期

2)第二种是常驻型,也就是说当应用程序关闭后如果有信息广播来,程序也会被系统调用自動运行

一个Handler允许你发送和处理Message和Runable对象,这些对象和一个线程的MessageQueue相关联每一个线程实例和一个单独的线程以及该线程的MessageQueue相关联。当你创建一个新的Handler时它就和创建它的线程绑定在一起了。这里线程我们也可以理解为线程的MessageQueue。从这一点上来看Handler把Message和Runable对象传递给MessageQueue,而且在这些对象离开MessageQueue时Handler负责执行他们。

Handler有两个主要的用途:(1)确定在将来的某个时间点执行一个或者一些Message和Runnable对象(2)在其他线程(不是Handler绑定線程)中排入一些要执行的动作。

当posting或者sending到一个Hanler时你可以有三种行为:当MessageQueue准备好就处理,定义一个延迟时间定义一个精确的时间去处悝。后两者允许你实现timeout,tick,和基于时间的行为

receivers等)和主线程创建的窗体。你可以创建自己的线程并通过一个Handler和主线程进行通信。这和之前┅样通过post和sendmessage来完成,差别在于在哪一个线程中执行这么java方法复写在恰当的时候,给定的Runnable和Message将在Handler的MessageQueue中被Scheduled

Message类就是定义了一个信息,这个信息中包含一个描述符和任意的数据对象这个信息被用来传递给Handler.Message对象提供额外的两个int域和一个Object域,这可以让你在大多数情况下不用作分配的动作

Looper类被用来执行一个线程中的message循环。默认情况没有一个消息循环关联到线程。在线程中调用prepare()创建一个Looper然后用loop()来处理messages,直到循環终止

下面是一个典型的带有Looper的线程实现。

当A进程要去调用B进程中的service时并实现通信,我们通常都是通过AIDL来操作的

说明一:aidl文件的位置鈈固定可以任意

然后定义自己的MyService类,在MyService类中自定义一个内部类去继承RemoteService.stub这个内部类实现getjava方法复写。在onBindjava方法复写中返回这个内部类的对象系统会自动将这个对象封装成IBinder对象,传递给他的调用者

为什么要指定调用AIDL服务的ID,就是要告诉外界MyService这个类能够被别的进程访问,只要别嘚进程知道这个ID正是有了这个ID,B工程才能找到A工程实现通信。

说明:AIDL并不需要权限

说明:如果我们单独将RemoteService.aidl文件放在一个包里那个在我们將gen目录下的该包拷贝到B工程中。如果我们将RemoteService.aidl文件和我们的其他类存放在一起那么我们在B工程中就要建立相应的包,以保证RmoteService.java文件的报名正確我们不能修改RemoteService.java文件

49.请解释下Android程序运行时权限与文件系统权限的区别。运行时权限Dalvik( android授权)

文件系统 linux 内核授权

50.系统上安装了多种浏览器能否指定某浏览器访问指定页面?请说明原由通过直接发送Uri把参数带过去,或者通过manifest里的intentfilter里的data属性

51.你如何评价Android系统优缺点。答:Android平台手機 5大优势:

在优势方面Android平台首先就是其开发性,开发的平台允许任何移动终端厂商加入到Android联盟中来显著的开放性可以使其拥有更多的開发 者,随着用户和应用的日益丰富一个崭新的平台也将很快走向成熟。开放性对于Android的发展而言有利于积累人气,这里的人气包括消費者和厂商而 对于消费者来讲,随大的受益正是丰富的软件资源开放的平台也会带来更大竞争,如此一来消费者将可以用更低的价位购得心仪的手机。

在过去很长的一段时间特别是在欧美地区,手机应用往往受到运营商制约使用什么功能接入什么网络,几乎都受箌运营商的控制从去年iPhone 上市,用户可以更加方便地连接网络运营商的制约减少。随着EDGE、HSDPA这些2G至3G移动网络的逐步过渡和提升手机随意接入网络已不是运营商 口中的笑谈,当你可以通过手机IM软件方便地进行即时聊天时再回想不久前天价的彩信和图铃下载业务,是不是像噩梦一样互联网巨头Google推动的 Android终端天生就有网络特色,将让用户离互联网更近

这一点还是与Android平台的开放性相关,由于Android的开放性众多的廠商会推出千奇百怪,功能特色各具的多种产品功能上的差异和特色,却 不会影响到数据同步、甚至软件的兼容好比你从诺基亚 Symbian风格掱机 一下改用苹果 iPhone ,同时还可将Symbian中优秀的软件带到iPhone上使用、联系人等资料更是可以方便地转移是不是非常方便呢?

四、不受任何限制的開发商

Android平台提供给第三方开发商一个十分宽泛、自由的环境不会受到各种条条框框的阻扰,可想而知会有多少新颖别致的软件会诞生。但也有其两面性血腥、暴力、情色方面的程序和游戏如可控制正是留给Android难题之一。

五、无缝结合的Google应用

如今叱诧互联网的Google已经走过10年喥历史从搜索巨人到全面的互联网渗透,Google服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带而Android平台手机将无缝结合这些优秀的Google服务。

由于手机与互联网的紧密联系个人隐私很难得到保守。除了上网过程中经意或不经意留下的个人足迹Google这个巨人也时时站在你的身后,洞穿一切因此,互联网的深入将会带来新一轮的隐私危机

二、首先开卖Android手机的不是最大运营商

众所周知,T-Mobile在23日于美國纽约发布了Android首款手机G1。但是在北美市场最大的两家运营商乃AT&T和 Verizon,而目前所知取得Android手机销售权的仅有 T-Mobile和Sprint其中T-Mobile的3G网络相对于其他三家也偠逊色不少,因此用户可以买账购买G1,能否体验到最佳的3G网络服 务则要另当别论了!

三、运营商仍然能够影响到Android手机

在国内市场不少鼡户对购得移动定制机不满,感觉所购的手机被人涂画了广告一般这样的情况在国外市场同样出现。Android手机的另一发售运营商Sprint就将在其机型中内置其手机商店程序

在不少手机论坛都会有针对某一型号的子论坛,对一款手机的使用心得交流并分享软件资源。而对于Android平台手機由于厂商丰富,产品类型多样这 样使用同一款机型的用户越来越少,缺少统一机型的程序强化举个稍显不当的例子,现在山寨机泛滥品种各异,就很少有专门针对某个型号山寨机的讨论和群 组除了哪些功能异常抢眼、颇受追捧的机型以外。

五、过分依赖开发商缺少标准配置

在使用PC端的Windows Xp系统的时候都会内置微软Windows Media Player这样一个浏览器程序,用户可以选择更多样的播放器如Realplay或暴风影音等。但入手开始使用默认的程序同样可以应付多样的需要在 Android平台中,由于其开放性软件更多依赖第三方厂商,比如Android系统的SDK中就没有内置音乐播放器铨部依赖第三方开发,缺少了产品 的统一性

在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应当出现下列情况時,Android就会显示ANR对话框了:

对输入事件(如按键、触摸屏事件)的响应超过5秒

Android应用程序完全运行在一个独立的线程中(例如main)这就意味着,任何在主线程中运行的需要消耗大量时间的操作都会引发ANR。因为此时你的应用程序已经没有机会去响应输入事件和意向广播(Intentbroadcast)。

因此任何运荇在主线程中的java方法复写,都要尽可能的只做少量的工作特别是活动生命周期中的重要java方法复写如onCreate()和 onResume()等更应如此。潜在的比较耗时的操莋如访问网络和数据库;或者是开销很大的计算,比如改变位图的大小需要在一个单独的子线程中完成 (或者是使用异步请求,如数据库操作)但这并不意味着你的主线程需要进入阻塞状态已等待子线程结束 -- 也不需要调用Therad.wait()或者Thread.sleep()java方法复写。取而代之的是主线程为子线程提供┅个句柄(Handler),让子线程 在即将结束的时候调用它(xing:可以参看Snake的例子这种java方法复写与以前我们所接触的有所不同)。使用这种java方法复写涉及你的應用程序能够保证你的程序 对输入保持良好的响应,从而避免因为输入事件超过5秒钟不被处理而产生的ANR这种实践需要应用到所有显示鼡户界面的线程,因为他们都面临着同样的超时 问题

53.什么情况会导致Force Close ?如何避免?能否捕获导致其的异常?

答:一般像空指针啊,可以看起logcat嘫后对应到程序中 来解决错误

54.Android本身的api并未声明会抛出异常,则其在运行时有无可能抛出runtime异常你遇到过吗?诺有的话会导致什么问题?如何解決?

答:一个activity呈现了一个用户可以操作的可视化用户界面

一个service不包含可见的用户界面,而是在后台无限地运行

可以连接到一个正在运行的服務中连接后,可以通过服务中暴露出来的借口与其进行通信

一个intent是一个Intent对象它保存了消息的内容。对于activity和service来说它指定了请求的操作洺称和待操作数据的URI

* Android的进程处理器现在会尽可能的不kill掉你

1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期切横屏时会执行一次,切竖屏时會执行两次

解答:可以将dictionary.db文件复制到Eclipse Android工程中的res aw目录中所有在res aw目录中的文件不会被压缩,这样可以直接提取该目录中的文件可以将dictionary.db文件複制到res aw目录中

58.如何将打开res aw目录中的数据库文件?

解答:在Android中不能直接打开res aw目录中的数据库文件,而需要在程序第一次启动时将该文件复制到掱机内存或SD卡的某个目录中然后再打开该数据库文件。复制的基本java方法复写是使用 getResources().openRawResourcejava方法复写获得res aw目录中资源的 InputStream对象然后将该InputStream对象中的數据写入其他的目录中相应文件中。在Android

答:a:从MVC的角度考虑(应用程序内)

其实回答这个问题的时候还可以这样问android为什么要有那4大组件,现在嘚移动开发模型基本上也是照搬的web那一套MVC架构只不过是改了 点嫁妆而已。android的四大组件本质上就是为了实现移动或者说嵌入式设备上的MVC架構它们之间有时候是一种相互依存的关系,有时候又是一种补充 关系引入广播机制可以方便几大组件的信息和数据交互。

b:程序间互通消息(例如在自己的应用程序内监听系统来电)

c:效率上(参考UDP的广播协议在局域网的方便性)

d:设计模式上(反转控制的一种应用类似监听者模式)

60.Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念

DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行都拥有一个独立的Dalvik虚拟机實例。而每一个DVM都是在Linux 中的一个进程所以说可以认为是同一个概念。

sim卡的文件系统有自己规范主要是为了和手机通讯,sim本身可以有自巳的操作系统EF就是作存储并和手机通讯用的

62.嵌入式操作系统内存管理有哪几种,各有何特性

页式段式,段页用到了MMU,虚拟空间等技术

63.什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?

嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作 出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统主要用于工业控制、军事设备、航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用 实时系统又可分为软实时和硬实时两种,而android是基于linux内核的因此属于软实时。

64.一条最长的短信息约占多少byte?

中文70(包括标点)英文160,160个字节

65.android中的动画有哪几类,它们的特点和区别是什么?

两种一种是Tween动画、还有一种是Frame动画。Tween动画这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另┅种Frame动画,传统的动画java方法复写通过顺序的播放排列好的图片来实现,类似电影

67.说说mvc模式的原理,它在android中的运用

68.DDMS和TraceView的区别?DDMS是一个程序執行查看器在里面可以看见线程和堆栈等信息,TraceView是程序性能分析器

70.谈谈Android的IPC(进程间通信)机制IPC是内部进程通信 的简称,是共享"命名管噵"的资源Android中的IPC机制是为了让Activity和Service之间可以随时的进行交互,故在Android 中该机制只适用于Activity和Service之间的通信,类似于远程java方法复写调用类似于C/S模式的访问。通过定义AIDL接口文件来定义IPC接

71.NDK是什么NDK是一些列工具的集合NDK提供了一系列的工具,帮助开发者迅速的开发C/C++的动态库并能自动将so囷java 应用打成apk包。

NDK集成了交叉编译器并提供了相应的mk文件和隔离cpu、平台等的差异,开发人员只需简单的修改mk文件就可以创建出so

当你看到这个博文首先你要了解onCreate这个创建java方法复写,再来继续下文!(可以参考我的上一个博文)

//在原来的软件上更新会从这里开始不卸载在线更新
//查询数据库中的数據

现在我们在版本号1上,安装这个新的版本2也就是说也就是说不卸载版本1,直接覆盖版本2看下图

更新了版本并且增加了一个列

我们插叺的是一条数据,为什么是两条呢是因为我们在版本1.0的时候就已经有了一条数据,后面sex在1.0的时候没有所以是null

我们再来第2次测试,卸载咹装的重新安装看看还是原来的数据或者执行的是onCreatejava方法复写还是onUpgrade java方法复写?

当你Android安装一个全新的应用会从onCreate这个java方法复写里创建。

当你Android茬旧版本上更新的时候会从onUpgradejava方法复写里更新

我要回帖

更多关于 java方法复写 的文章

 

随机推荐