搜档网
当前位置:搜档网 › Android部份进程意外停止的解决办法

Android部份进程意外停止的解决办法

Android部份进程意外停止的解决办法
Android部份进程意外停止的解决办法

如何使用PS3控制器在SGSII或者华硕Transformer上玩

Shadowgun

正如大家所熟知的,来自Madfinger Games的Shadowgun目前是Android平台上最为热门的游戏。该游戏于上周发布,面对Tegra 2设备,已经引爆了排行榜,很快,非Tegra 2 Android设备用户以及没有root权限的用户,也能亲身体验这款游戏了。

如果你拥有一部三星Galaxy SII,你玩Shandowgun的时候,需要进行一些小设置。当然,这设置对大多数支持Chainfire3D和Sixaxis控制器的最新Android设备都适用。我们给出的例子使用了SGSII。此外,即使它不需要root权限或者Chainfire3D,它还能向你展示使用PS3控制器在华硕Transformer上进行游戏的效果。既然华硕Transformer 不需要Chainfire3D,你就能在任何没有root权限的Tegra 2设备上进行尝试。

步骤:

* 使用Sixaxis控制器应用软件将PS3控制器与你的Android设备进行配对;

* 在Sixaxis控制器应用中,点击菜单键打开它的设置,检查旁路IME旁边的框;

* 进入设置中的输入映射,选择第一个控制器映射;

* 你将看到PS3控制器上的按钮列表,按其中任意一个将让你映射到该按钮相应的键;

* 这里就是所有按键和它们对应的功能,你可以将它们映射到控制器上你喜欢的任意按钮;

^ Dpad中心= 开火

^ 7 = 上子弹

^ Dpad左,右,上,下= 第一模拟摇杆的左、右、上、下

^ J,L,I,K = 第二模拟摇杆的左、右、上、下

^ A,D,W,S = 四款武器栏选择键

^ Back = 暂停

* 一旦你映射了键值,你就全部设置好了(你不需要映射Shadowgun中所有的键,因为你要拿PS3控制当做USB游戏手柄)。

由于你要在玩Shadowgun的过程中通过蓝牙来使用PS3控制器,因此,一旦你停止击键或者移动,就会产生延迟,你会看到自己游戏中的角色,有那么一两秒钟,继续正在做的动作。那只是从控制器到设备的信号产生了延迟。除此之外,有了控制器,对那些习惯了乐掌网是为安卓爱好者寻找最新最火爆的安卓软件,安卓游戏,安卓壁纸的安卓市场,同时为了安卓爱好者了解最新资讯提供最新及时的安卓资讯的后起专业安卓刷机中文平台,拥有乐掌网,

玩这类游戏的人来说要方便多了。如果你习惯了触屏控制,你就不用做这些事情,直接用自己的设备玩就好了。

附注:如果你通过USB使用控制器,就不会有任何使用蓝牙时所产生的小延迟。

乐掌网是为安卓爱好者寻找最新最火爆的安卓软件,安卓游戏,安卓壁纸的安卓市场,同时为了安卓爱好者了解最新资讯提供最新及时的安卓资讯的后起专业安卓刷机中文平台,拥有乐掌网,

Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码分析

在前面几篇文章中,我们详细介绍了Android系统进程间通信机制Binder的原理,并且深入分析了系统提供的Binder运行库和驱动程序的源代码。细心的读者会发现,这几篇文章分析的Binder接口都是基于C/C++语言来实现的,但是我们在编写应用程序都是基于Java语言的,那么,我们如何使用Java语言来使用系统的Binder机制来进行进程间通信呢?这就是本文要介绍的Android系统应用程序框架层的用Java语言来实现的Binder接口了。 熟悉Android系统的读者,应该能想到应用程序框架中的基于Java语言的Binder接口是通过JNI来调用基于C/C++语言的Binder运行库来为Java应用程序提供进程间通信服务的了。JNI在Android系统中用得相当普遍,SDK中的Java 接口API很多只是简单地通过JNI来调用底层的C/C++运行库从而为应用程序服务的。 这里,我们仍然是通过具体的例子来说明Binder机制在应用程序框架层中的Java接口,主要就是Service Manager、Server和Client这三个角色的实现了。通常,在应用程序中,我们都是把Server实现为Service的形式,并且通过IServiceManager.addService接口来把这个Service添加到Service Manager,Client也是通过IServiceManager.getService接口来获得Service接口,接着就可以使用这个Service提供的功能了,这个与运行时库的Binder接口是一致的。 前面我们学习Android硬件抽象层时,曾经在应用程序框架层中提供了一个硬件访问服务HelloService,这个Service运行在一个独立的进程中充当Server的角色,使用这个Service的Client运行在另一个进程中,它们之间就是通过Binder机制来通信的了。这里,我们就使用HelloService这个例子来分析Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码。所以希望读者在阅读下面的内容之前,先了解一下前面在Ubuntu上为Android系统的Application Frameworks层增加硬件访问服务这篇文章。 这篇文章通过五个情景来学习Android系统进程间通信Binder机制在应用程序框架层的Java接口:1. 获取Service Manager的Java远程接口的过程;2. HelloService接口的定义;3. HelloService的启动过程;4. Client获取HelloService 的Java远程接口的过程;5. Client通过HelloService的Java远程接口来使用HelloService提供的服务的过程。 一. 获取Service Manager的Java远程接口

Android 杀掉自己进程的方法

Android 杀掉自己进程的方法 Process.killProcess(Process.myPid()); 代码如下 protected void quit() { int size = activityManager.activityStackCount(); for(int i =size-1 ; i > 0 ;i--) { Activity activity = activityManager.allT askActivity().get(i); activityManager.popActivity(activity); } activityManager = null; getActivity().finish(); //目前最为通用的关闭进程的方法以后的版本使用 Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(startMain); android.os.Process.killProcess(android.os.Process.myPid()); } android.os.Process.killProcess(appProcessInfo.pid);只能杀死自己所创建的进程,其它进程是杀不掉的,要用到另外一个方法 activityManager.killBackgroundProcesses(processName);,同是权限也要加上 以下是我的测试代码 public class ListViewActivity extends Activity { /** Called when the activity is first created. */ private Button button; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

Android下Camera框架解析

Android 下Camera 构架分析 一. Android Camera 层次结构 Android 下Camera 子系统从上到下可以分为应用层、框架层、运行库层及内核层,其结构如下图所示。从整体上看,它还是属于Android 下典型的client/service 的结构,运行在两个进程中,一个是client 进程,主要包括JA V A 代码与一些Native c/c++代码;另一个是service 进程,属于服务端,是native c/c++代码,并且,camera service 属于Android 系统的一个native 服务,用native c/c++代码实现,主要负责和Linux kernel 中的Camera Driver 交互,搜集Linux kernel 中Camera Driver 上传的数据,并交给显示系统(surface)显示。 client 进程与service 进程通过Binder 机制通信,client 端通过调用service 端的接口实现各个具体的功能。但真正的preview 数据不会通过Binder IPC 机制从service 端复制到client 端,而是通过回调函数与消息的机制将preview 数据buffer 的地址传到client 端,最终可在Java 应用中操作处理这个preview 数据。 android_hardware.camera Camera Apps Libandroid_runtime.so (android_hardware_Camera.cpp) libcamera_client.so (Camara.cpp) 应用层框架层运行库层 硬件层 Libcamera.so (HAL)libcameraservice.so (CameraService.cpp)Linux 内核层 V4L2 Kernel Driver Camera Hardware BinderIPC JNI Client Service 二. Android Camera 的代码结构 1)应用层 Camera 的应用层在Android 上表现为直接调用SDK API 开发的一个

Android SERVICE后台服务进程的自启动和保持

Android SERVICE后台服务进程的自启动和保持 Service组件在android开发中经常遇到,其经常作为后台服务,需要始终保持运行,负责处理一些必要(见不得人)的任务。而一些安全软件,如360等,会有结束 进程的功能,如果不做Service的保持,就会被其杀掉。 在早些时候,我们可以通过在 1. service中重写onStartCommand方法,这个方法有三个返回值, START_STICKY 是service被kill掉后自动 public int onStartCommand(Intent intent, int flags, int startId) { return START_STICKY; } 2. 配置android:persistent="true" 3. setForeground(true); 4. android:process=”com.xxx.xxxservice”配置到单独的进程中 以上的方法要么只是提升service优先级或者存活率, 并不能解决被安全软件强行 杀死的问题。要么像第四种单独的进程运行service在360老的版本是可以的,但是在360的比较新的版本中仍然会被杀死. 如何保持Service的运行状态是现在要说明的,核心就是利用ANDROID的系统广播,触发自己的程序检查Service的运行状态,如果被杀掉,就再起来。 常用的有开机广播,解锁屏幕的广播,电量变化等等,其中解屏的广播算比较频 繁的了,但是也并不能保证一定的频率,尤其是在特定的时间里(比如用户睡觉的时候,用户并不进行解锁操作).而我们仍要做一些操作的时候,就没有办法了。 因此,我采用了一种别的方案. 另外再加上两个类似一守护进程的Service,分别检查Service的运行状态,注册响应的广播,对其进行守护,一旦发现没有运行就将其 启动. 我利用的系统广播是:Intent.ACTION_TIME_TICK。这个广播每分钟发送一次, 我们可以每分钟检查一次Service的运行状态,如果已经被结束了,就重新启动Service。它的优点就是间隔时间短而且非常稳定, 而其他的广播并不能保证这一点,当然,在具体的应用中还是要根据需求使用, 结合其他广播来保证自己的service一定会 被重启。毕竟现在安全软件是越来越厉害了,更新得也是非常频繁. 有时间还是要看下还有没有其他的方法,综合几种来使用.

基于Android平台的手机通讯录管理系统

第一章绪论 1.1 项目研究背景 经过多年的发展,随着第三代网络的使用及四代网络的即将来了呢,移动终 端不再仅是通讯网络的终端,还将成为互联网的终端。因此,移动终端的应用 软件和需要的服务将会有很大的发展空间。Google与包括HTC、摩托罗拉、三星、联想等在内的三十多家技术和无线应用的领军企业组成的开发联盟为此于2007年11月退出了一份专为移动设备设计的软件平台——Android OS。 Android 是一套真正意义上的移动性设备综合平台,它包括操作系统、中间 件和一些关键的平台应用。Android的Java程序运行环境包含一组Java核心函数库及Dalvik虚拟机,它们有效地优化额Java程序的运行过程。Android 系统平台基于优化了的Linux内核,它提供诸如内存管理、进程管理、设备驱动等服务,同时也是手机硬件的连接层。 Abdroid平台的开放性等特点既能促进技术(包括平台本身)的创新,又有 助于降低开发成本,还可以是运营商能非常方便地制定特色化的产品,因此, 它具有很大的市场发展潜力。 1.2 项目研究的目的及意义 随着3G网络的使用,移动终端不再仅是通讯网络的终端,还将成为互联网的终端。因此,移动终端的应用软件和需要的服务将会有很大的发展空间。在Google和Android手机联盟的共同推动下,Android在众多手机操作系统中脱颖而出,受到广大消费者的欢迎。 手机通讯录作为手机的基本功能之一,每天我们都在频繁地使用着。根据手 机功能的不断加强与完善,手机通讯录对于人们的意义,已经不仅仅像记事簿 一样显示通讯地址,而是向着个性化、人性化的方向发展。通讯录从无到有, 从英文到中文,经过了十几年的发展历程,今后的发展趋势就是从通讯录发展 为名片夹,也就是一个人名下,可以储存座机、手机、单位、地址、电子邮箱 等内容,这种名片夹在电话薄的基础上,大大丰富了内容,同时结构也发生了 革命性的的变化,而且随着手机的发展,相信更优秀的通讯录会越来越受到社 会各层认识的喜爱。 1.3系统主要内容与实现方式

小议Android多进程以致Application多次初始化

小议Android多进程以致Application多次初始化 最近遇到一个bug,当应用加了多进程后,比如总共进程数为N,会出现在startService()时onStartCommand()方法会被重复调用(N-1)次的奇怪现象。 祸起 最近遇到两个模块互不相干却受到影响的奇怪问题,一个push模块和一个DaemonProcess模块在一起后,会出现如下现像的问题当DaemonProcess为应用加了多进程后,比如总共进程数为N,会出现push模块在startService()时onStartCommand()方法会被重复调用(N-1)次的奇怪现象。 寻踪 ?因为我们用的是Jpush的原因,一开始以为是Jpush,但最后发现是因为引用多进程的原因 ?再寻找下去发现调用一次startService()时onStartCommand()运行多次 ?而这两者有何关系呢 举证 Demo测试: 首先在Application中申明四个service,其中ServiceA和ServiceC都各自另开一个进程,ServiceB和ServiceD都在主进程中,AndroidManifest.xml如下:

此时在Application中启动四个Service startService(new Intent(this, ServiceA.class)); startService(new Intent(this, ServiceB.class)); startService(new Intent(this, ServiceC.class)); startService(new Intent(this, ServiceD.class)); 同时各Service打下如下log: public static final String TAG = ServiceB.class.getSimpleName(); @Override public void onCreate() { super.onCreate();Log.i(TAG,"onCreate" + "pid:" + android.os.Process.myPid()); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i(TAG,"onStartCommand" + "pid:" + android.os.Process.myPid()); return super.onStartCommand(intent, flags, startId);

Android Binder设计与实现 – 设计篇

Android Binder设计与实现–设计篇 摘要 Binder是Android系统进程间通信(IPC)方式之一。Linux已经拥有管道、system V IPC、socket等IPC手段,却还要倚赖Binder来实现进程间通信,说明Binder具有无可比拟的优势。深入了解Binder并将之与传统 IPC做对比有助于我们深入领会进程间通信的实现和性能优化。 本文将对Binder的设计细节做一个全面的阐述,首先通过介绍Binder通信模型和Binder通信协议了解Binder的设计需求;然后分别阐述Binder在系统不同部分的表述方式和起的作用;最后还会解释Binder在数据接收端的设计考虑,包括线程池管理,内存映射和等待队列管理等。通过本文对Binder的详细介绍以及与其它IPC通信方式的对比,读者将对Binder的优势和使用Binder 作为Android主要IPC方式的原因有深入了解。 1.引言 基于Client-Server的通信方式广泛应用于从互联网和数据库访问到嵌入式手持设备内部通信等各个领域。智能手机平台特别是Android 系统中,为了向应用开发者提供丰富多样的功能,这种通信方式更是无处不在,诸如媒体播放,视音频捕获,到各种让手机更智能的传感器(加速度、方位、温度、光亮度等)都由不同的Server负责管理,应用程序只需作为Client与这些Server建立连接便可以使用这些服务,花很少的时间和精力就能开发出令人眩目的功能。Client-Server方式的广泛采用对进程间通信(IPC)机制是一个挑战。目前linux 支持的IPC包括传统的管道、System V IPC、即消息队列/共享内存/信号量,以及socket中只有socket支持Client-Server的通信方式。当然也可以在这些底层机制上架设一套协议来实现Client-Server通信,但这样增加了系统的复杂性,在手机这种条件复杂,资源稀缺的环境下可靠性也难以保证。 另一方面是传输性能。socket作为一款通用接口,其传输效率低,开销大,主要用在跨网络的进程间通信和本机上进程间的低速通信。消息队列和管道采用存储-转发方式,即数据先从发送方缓存区拷贝到内核开辟的缓存区中,然后再从内核缓存区拷贝到接收方缓存区,至少有两次拷贝过程。共享内存虽然无需拷

Android系统启动流程(一)解析init进程

Android系统启动流程(一)解析init 进程 前言 作为“Android框架层”这个大系列中的第一个系列,我们首先要了解的是Android系统启动流程,在这个流程中会涉及到很多重要的知识点,这个系列我们就来一一讲解它们,这一篇我们就来学习init进程。 1.init简介 init进程是Android系统中用户空间的第一个进程,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建zygote(孵化器)和属性服务等。init进程是由多个源文件共同组成的,这些文件位于源码目录system/core/init。本文将基于Android7.0源码来分析Init进程。 2.引入init进程 说到init进程,首先要提到Android系统启动流程的前几步: 1.启动电源以及系统启动 当电源按下时引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导程序Bootloader到RAM,然后执行。 2.引导程序Bootloader 引导程序是在Android操作系统开始运行前的一个小程序,它的主要作用是把系统OS拉起来并运行。 3.Linux内核启动 内核启动时,设置缓存、被保护存储器、计划列表,加载驱动。当内核完成系统设置,它首先在系统文件中寻找”init”文件,然后启动root进程或者系统的第一个进程。 4.init进程启动 讲到第四步就发现我们这一节要讲的init进程了。关于Android系统启动流程的所有步骤会在本系列的最后一篇做讲解。 3.init入口函数 init的入口函数为main,代码如下所示。 system/core/init/init.cpp int main(int argc, char** argv) { if (!strcmp(basename(argv[0]), "ueventd")) { return ueventd_main(argc, argv); } if (!strcmp(basename(argv[0]), "watchdogd")) { return watchdogd_main(argc, argv);

android开机过程

一、Android开机启动流程简介 1、OS-level: 由bootloader载入linux kernel后kernel开始初始化, 并载入built-in 的驱动程序。Kernel完成开机后,载入init process,切换至user-space。 Init进程是第一个在user-space启动的进程。 2、Android-level: 由init process读取init.rc,Native 服务启动,并启动重要的外部程序,例如:servicemanager、Zygote以及System Server等。 由 init process 根据硬件类型读取init.xxx.rc。由init.xxx.rc加载init.xxx.sh。 由 init.xxx.sh 加载特定的硬件驱动。如hi_tuner.ko、hi_demux.ko等。 3、Zygote-Mode: Zygote 启动完SystemServer 后,进入Zygote Mode,在Socket 等候命令。 随后,使用者将看到一个桌面环境(Home Screen)。桌面环境由一个名为[Launcher]的应用程序负责提供。 本文档重点研究Android-level中的启动流程。 启动流程如下图所示:

二、init process流程分析 init进程简介 init进程是第一个在user-space启动的进程。由内核启动参数[init]传递给内核,如果该项没有设置,内核会按 /etc/init,/bin/init,/sbin/init,/bin/sh的顺序进行尝试,如果都有的都没找到,内核会抛出 kernel panic:的错误。

安卓进程android process media一直占用CPU、发热问题解决方法

关于安卓系统android.process.media进程一直占用CPU、消耗电池电量、手机发热、异常停止等的解决方案 一、现象: 手机开机一段长时间后,操作反应仍然巨慢,近似死机。 平时1分钟内完全开机,尔后操作会很顺畅,偶尔会有小卡,但不会完全卡死。开启“设置->开发者选项->监控->显示CPU使用情况”后,发现android.process.media一直在占用cpu。 通过Watchdog Task Manager和SystemTuner查看其CPU占用率,维持在60%以上。即使重启也一样卡死。(android 4.1.2) 二、分析: 1.“受DRM保护的内容的存储、下载管理器、下载内容、媒体存储”在同一个进程中,即android.process.media。开机后,进程android.process.media会运行一段时间后停止并转为后台(扫描时间因数据量而定,我的11G数据要扫描10分钟左右才停止,不过优先级比较低),其服务是一个MediaScannerService。android.process.media包括“受DRM保护的内容的存储、下载管理器、下载内容、媒体存储”等软件包。 2.系统升级、刷机后或数据出错,很容易出现android.process.media异常停止或一直占用CPU的情况。 3.某些程序开机启动,对系统进行扫描动作。 三、解决方案: 1.如果出现android.process.media一直占用CPU的情况,在“系统设置->应用->全部->下载管理器”中选择“清除数据”。 2.如果出现“andrioid.proces.media已停止”,在“设置->应用程序->管理应用程序->全部->媒体储存”中,选择“清除数据”。 3.有Root的手机,尽量安装管理软件,禁止一些不必要开机启动的软件。 PS:在保留用户数据而进行升级或刷机时,一些软件会出现异常停止的情况,也可以先尝试进入“管理应用”清除其数据。

“进程android.process.acore已意外停止”解决办法大全

“进程android.process.acore已意外停止”解决办法大全 一般我们在操作手机的时候,遇到出现的比较多的系统问题是出现“进程android.process.acore已意外停止”的提示。下面针对比较常出现的情况提供解决的办法。 一、三星的机子升级4.0.3后 兴致勃勃的刷机,但成功后总是FC,郁闷至极。但恢复出厂设置就没问题,刚开始以为是程序冲突,后来发现并不是这样,清空通讯录也可以正常使用。 解决方法:设置——应用程序管理——将google通讯录同步、联系人存储、通讯录这三项清除数据,注意先备份。之后再设置——账户与同步——登陆google账户同步联系人即可。 二、刷机的时候因为失误操作,弹出了“android.process.acore出问题”的提示,重刷也无法解决。 出现这个提示不用担心,并不是手机出了毛病。“android.process.acore出问题“的解决的方法很简单。 解决方法:请先备份一下手机的联系人资料,然后进入设置,选择程序,选择程序管理,选择全部,找到联系人储存,然后清除数据,这样再刷机就没有问题了。某些手机显示的是“进程android.process.acore已意外停止”,解决方法是一样的。 三、小米手机出现了“android.process.acore ”的情况 如果是小米手机出现了“android.process.acore出问题”的提示,有可能是因为你删除了谷歌框架内重要的文件。 解决方法:请到小米官网上下载一个对应的升级包,然后放到SD卡内,选择系统更新,点击菜单键,选择安装包,找到你放入到SD卡中的安装包,选择立即更新,开始升级。等到升级完成后,重启手机,即可解决这个问题。

Android中的IPC binder机制

android 中的IPC binder 机制 第一部分 Binder的组成 1.1 驱动程序部分驱动程序的部分在以下的文件夹中: kernel/include/linux/binder.h kernel/drivers/Android/binder.c binder驱动程序是一个miscdevice,主设备号为10,此设备号使用动态获得(MISC_DYNAMIC_MINOR),其设备的节点为: /dev/binder binder驱动程序会在proc文件系统中建立自己的信息,其文件夹为 /proc/binde,其中包含如下内容: proc目录:调用Binder各个进程的内容 state文件:使用函数binder_read_proc_state stats文件:使用函数binder_read_proc_stats transactions文件:使用函数binder_read_proc_transactions transaction_log文件:使用函数binder_read_proc_transaction_log,其参数为binder_transaction_log (类型为struct binder_transaction_log) failed_transaction_log文件:使用函数 binder_read_proc_transaction_log 其参数为 binder_transaction_log_failed (类型为struct binder_transaction_log) 在binder文件被打开后,其私有数据(private_data)的类型: struct binder_proc 在这个数据结构中,主要包含了当前进程、进程ID、内存映射信息、Binder 的统计信息和线程信息等。 在用户空间对Binder驱动程序进行控制主要使用的接口是mmap、poll和ioctl,ioctl主要使用的ID为: #define BINDER_WRITE_READ _IOWR('b', 1, struct binder_write_read) #define BINDER_SET_IDLE_TIMEOUT _IOW('b', 3, int64_t) #define BINDER_SET_MAX_THREADS _IOW('b', 5, size_t)

Android进程管理机制及优化 for HTC HeRO

Android进程管理机制及优化for HTC HeRO(其它设备也可参考)+自动内存管理程序 理论 Android采取了一种有别于Linux的进程管理策略,有别于Linux的在进程活动停止后就结束该进程,Android把这些进程都保留在内存中,直到系统需要更多内存为止。这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度。 那Android什么时候结束进程?结束哪个进程呢?之前普遍的认识是Android是依据一个名为LRU(last recently used 最近使用过的程序)列表,将程序进行排序,并结束最早的进程。XDA的楼主又进一步对这个管理机制进行研究,有了如下发现: 1.系统会对进程的重要性进行评估,并将重要性以“oom_adj”这个数值表示出来,赋予各个进程;(系统会根据“oom_adj”来判断需要结束哪些进程,一般来说,“oom_adj”的值越大,该进程被系统选中终止的可能就越高) 2.前台程序的“oom_adj”值为0,这意味着它不会被系统终止,一旦它不可访问后,会获得个更高的“oom_adj”,作者推测“oom_adj”的值是根据软件在LRU列表中的位置所决定的; 3.Android不同于Linux,有一套自己独特的进程管理模块,这个模块有更强的可定制性,可根据“oom_adj”值的范围来决定进程管理策略,比如可以设定“当内存小于X时,结束“oom_adj”大于Y的进程”。这给了进程管理脚本的编写以更多的选择。 4.Android将进程分为六大类: 1.前台进程(foreground):目前正在屏幕上显示的进程和一些系统进程。举例来说,Dialer Storage,Google Search等系统进程就是前台进程;再举例来说,当你运行一个程序,如浏览器,当浏览器界面在前台显示时,浏览器属于前台进程(foreground),但一旦你按home 回到主界面,浏览器就变成了后台程序(background)。我们最不希望终止的进程就是前台进程。 2.可见进程(visible):可见进程是一些不再前台,但用户依然可见的进程,举个例来说:widget、输入法等,都属于visible。这部分进程虽然不在前台,但与我们的使用也密切相关,我们也不希望它们被终止(你肯定不希望时钟、天气,新闻等widget被终止,那它们将无法同步,你也不希望输入法被终止,否则你每次输入时都需要重新启动输入法) 3.次要服务(secondary server):目前正在运行的一些服务(主要服务,如拨号等,是不可能被进程管理终止的,故这里只谈次要服务),举例来说:谷歌企业套件,Gmail内部存储,联系人内部存储等。这部分服务虽然属于次要服务,但很一些系统功能依然息息相关,我们时常需要用到它们,所以也太希望他们被终止 4.后台进程(hidden):虽然作者用了hidden这个词,但实际即是后台进程(background),就是我们通常意义上理解的启动后被切换到后台的进程,如浏览器,阅读器等。当程序显示在屏幕上时,他所运行的进程即为前台进程(foreground),一旦我们按home返回主界面(注

android Camera框架分析

Android的Camera系统分析 一、Camera构架分析 Android 的Camera包含取景(preview)和拍摄照片(take picture)的功能。目前Android 发布版的Camera程序虽然功能比较简单,但是其程序的架构分成客户端和服务器两个部分,它们建立在Android的进程间通讯Binder的结构上。Android中Camera模块同样遵循Andorid的框架,如下图所示 Camera Architecture Camera模块主要包含了libandroid_runtime.so、libui.so和libcameraservice.so等几个库文件,它们之间的调用关系如下所示: 在Camera模块的各个库中,libui.so位于核心的位置,它对上层的提供的接口主要是Camera 类。 libcameraservice.so是Camera的server程序,它通过继承libui.so中的类实现server的功能,并且与libui.so中的另外一部分内容通过进程间通讯(即Binder机制)的方式进行通讯。 libandroid_runtime.so和libui.so两个库是公用的,其中除了Camera还有其他方面的功能。整个Camera在运行的时候,可以大致上分成Client和Server两个部分,它们分别在两个进程中运行,它们之间使用Binder机制实现进程间通讯。这样在client 调用接口,功能则在server中实现,但是在client中调用就好像直接调用server中的功能,进程间通讯的部分对上层程序不可见。 从框架结构上来看,源码中ICameraService.h、ICameraClient.h和ICamera.h三个类定义了MeidaPlayer的接口和架构,ICameraService.cpp和Camera.cpp两个文件则用于Camera 架构的实现,Camera的具体功能在下层调用硬件相关的接口来实现。 从Camera的整体结构上,类Camera是整个系统核心,ICamera类提供了Camera主要功能的接口,在客户端方面调用;CameraService是Camera服务,它通过调用实际的Camera硬件接口来实现功能。事实上,图中红色虚线框的部分都是Camera程序的框架部分,它主要利用了Android的系统的Binder机制来完成通讯。蓝色的部分通过调用Camera硬件相关的接口完成具体的Camera服务功能,其它的部分是为上层的JA V A程序提供JNI接口。在整体结构上,左边可以视为一个客户端,右边是一个可以视为服务器,二者通过Android的Bimder来实现进程间的通讯。 二、Camera的工作流程概述: ①.App_main process: 进程通过AndroidRuntime调用register_jni_procs向JNI注册模块的native函数供JVM调用。 AndroidRuntime::registerNativeMethods(env, "android/hardware/Camera", camMethods, NELEM(camMethods)); 其中camMethods定义如下: static JNINativeMethod camMethods[] = { { "native_setup", "(Ljava/lang/Object;)V", (void*)android_hardware_Camera_native_setup }, { "native_release", "()V", (void*)android_hardware_Camera_release },

android中线程与线程进程与进程之间如何通信

1. Android中进程与进程、线程与线程之间如何通信? 1)一个Android 程序开始运行时,会单独启动一个Process。 默认情况下,所有这个程序中的Activity或者Service都会跑在这个Process。 默认情况下,一个Android程序也只有一个Process,但一个Process下却可以有许多个Thread。 2)一个Android 程序开始运行时,就有一个主线程Main Thread被创建。该线程主要负责UI界面的显示、更新和控件交互,所以又叫UI Thread。 3)一个Android程序创建之初,一个Process呈现的是单线程模型--即MainThread,所有的任务都在一个线程中运行,所以,MainThread所调用的每一个函数,其耗时应该越短越好,而对于比较耗时的工作,应该交给子线程去做,以避免主线程(UI线程)被阻塞,导致程序出现ANR(Application not response) 一个Activity就运行在一个线程中吗?或者编码时,如果不是明确安排在不同线程中的两个Activity,其就都是在同一个线程中?那从一个Activity跳转到另一个Activity时,是不是跳出的那个Activity就处在睡眠状态了? 【答】每个Activity都有一个Process属性,可以指定该Activity是属于哪个进程的。当然如果不明确指明,应该就是从属于默认进程(Application指定的,如其未指定,应该就是默认主进程)。 Android中有Task的概念,而同一个Task的各个Activity会形成一个栈,只有站定的Activity 才有机会与用户交互。 原文地址:Android中的进程与线程原文作者:江鹏 当应用程序的组件第一次运行时,Android将启动一个只有一个执行线程的Linux进程。默认,应用程序所有的组件运行在这个进程和线程中。然而,你可以安排组件运行在其他进程中,且你可以为进程衍生出其它线程。本文从下面几点来介绍Android的进程与线程: 1、进程 组件运行于哪个进程中由清单文件控制。组件元素——,都有一个process属性可以指定组件运行在哪个进程中。这个属性可以设置为每个组件运行在自己的进程中,或者某些组件共享一个进程而其他的不共享。他们还可以设置为不同应用程序的组件运行在同一个进程中——假设这些应用程序共享同一个Linux用户ID 且被分配了同样的权限。元素也有process属性,为所有的组件设置一个默认值。 所有的组件都在特定进程的主线程中实例化,且系统调用组件是由主线程派遣。不会为每个实例创建单独的线程,因此,对应这些调用的方法——诸如View.onKeyDown()报告用用户的行为和生命周期通知,总是运行在进程的主线程中。这意味着,没有组件当被系统调用时应该执行很长时间或阻塞操作(如网络操作或循环计算),因为这将阻塞进程中的其它组件。你可以为长操作衍生独立的线程。

Android实验报告—网络通信

实验三Android网络通信 实验目的: 本实验的目的是使学生深入了解利用Intent实现进程间的通信过程。学会利用Intent进行Activity的跳转,以及链接网页信息;学会利用Intent将其他Activity 的信息返回到Activity中的方法。体会Activity间通信的过程。 实验要求: 编程实现下述功能:主界面上有一个“登录”按钮和“链接网页”按钮,点击“登录”按钮后打开一个新的Activity;新的Activity上面有输入用户名和密码的控件(如下图所示)点击“链接网页”按钮,新的Activity上面有输入Uri信息的控件,可以链接到相应的网站,在用户关闭这个Activity后,返回到主界面中程序界面如下图所示: [实现提示] 1、建立Android工程,其中 工程名称:WebCommunication579 包名称:https://www.sodocs.net/doc/d08466492.html,.bistu.dj1001. WebCommunication579 Activity名称:WebCommunication579 2、工程建立完毕后,首先进行界面设计,建立相应的子Layout界面

3、在工程中添加相应的.java文件,处理各个Activity的事件响应 4、在Manifest中添加新建的Activity信息,进行注册。 程序源码: 主界面java文件代码: package cn.deu.bistu.dj1001.WebCommunication579; import android.app.Activity; import android.content.Intent; import https://www.sodocs.net/doc/d08466492.html,.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class WebCommunication579 extends Activity { private Button btnLogin,btnGoToWeb; private TextView show; private static final int SUBACTIVITY1 = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.sodocs.net/doc/d08466492.html,yout.main); btnLogin=(Button) findViewById(R.id.btnLogin); btnGoToWeb=(Button) findViewById(R.id.btnGoToWeb); show=(TextView) findViewById(R.id.A1show); btnLogin.setOnClickListener(new OnClickListener(){ public void onClick(View v) { Intent intent = new Intent(WebCommunication592.this, activity1.class); startActivityForResult(intent, SUBACTIVITY1); }}); btnGoToWeb.setOnClickListener(new OnClickListener(){ public void onClick(View v) { Intent intent = new Intent(WebCommunication592.this, activity2.class); startActivity(intent); }}); } protected void onActivityResult(int requestCode, int

Android双应用进程工控方案

Android双应用进程工控方案(二) ------Android双应用进程Demo程序设计 英创公司 2017年12月 Android是移动设备的主流操作系统,近年来越来越多的工业领域的客户开始关注基于Android操作系统的设备在工控领域的应用。鉴于Android是基于Linux内核的事实,我们发展了一种以双应用进程为特色的Android工控应用方案,并在ESM6802工控主板上加以实现。具体说来,就是在Linux平台上运行一个直接操作硬件接口的控制通讯管理进程,为保证运行效率,该进程采用C/C++语言编写(以下简称C进程或控制进程);另一方面在Android平台采用标准Java语言编写一个人机界面进程(以下简称Java进程)。底层的控制进程并不依赖与上层的Java进程而独立运行,两个进程之间通过本地IP进行通讯,控制进程处于服务器侦听模式,Java进程则为客户端模式。本方案的主要优点是客户可以直接继承已有的现成应用程序作为底层控制进程的基础,仅仅增加标准的Socket侦听功能,即可快速完成新的底层应用程序的设计。而界面的Java程序,由于不再涉及具体的工控硬件接口,属于单纯的Android程序,编程难度也大大降低。 设计Android双应用进程Demo程序的目的就是验证“双应用进程”Android工控应用方案的可行性,同时起到一个抛砖引玉的作用。本设计文档将具体讲解设计思路,约束通信协议和接口。 一、总体描述 总体要求如下: 采用C/S(客户端/服务端)模式,通过socket连接,通信需要自定义通信协议; 客户端使用Java语言开发,主要是人机交互,查询以及简单的设置功能; 服务端使用C/C++语言开发,主要是各个功能模块的业务逻辑正常运行,以及接收处理客户端的人机交互请求; 服务端各个功能模块的业务逻辑部分始终正常运行,客户端连接与否,不影响各个模块 1 / 11

相关主题