WEB开发网
开发学院手机开发Android 开发 android 进程的优先级 阅读

android 进程的优先级

 2013-10-06 14:13:31 来源:WEB开发网   
核心提示:noti.flags=Notification.FLAG_ONGOING_EVENT;noti.setLatestEventInfo(this, "改变Service优先级", "设置service为foreground级别", pintent);startForeground(
noti.flags=Notification.FLAG_ONGOING_EVENT;
noti.setLatestEventInfo(
this, "改变Service优先级", "设置service为foreground级别", pintent);
startForeground(97789, noti);
}else if(Constant.ACTION_STOP_FORE.equals(action)){
Log.i(tag,"stopForeground");
stopForeground(true);//取消当前服务为前台服务
}
return super.onStartCommand(intent, flags, startId);
}
步骤3、打开项目清单文件,注册该服务,如下代码中红框中代码所示:
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<service android:name="MyService"></service>
</application>
12.2.UI与线程
12.2.1.概述
UI是英文User Interface单词的简称。
当应用程序启动时,系统会为应用程序创建一个主线程(main)或者叫UI线程,它负责分发事件到不同的控件(例如绘画事件)以完成应用程序与Android UI孔庙件的交互。
例如,当触摸屏幕上的一个按钮时,UI线程会把触摸事件分发到控件上,更改状态并加入事件队列,UI线程会分发请求和通知到各个控件,完成相应的动作。
单线程模型的性能是非常差的,除非应用程序相当简单,特别是当所有的操作都在主线程中执行,比如访问网络或数据库之类的耗时操作将会导致用户界面锁定,所有的事件将不能分发,应用程序就像死了一样,更严重的是当超过5秒时,系统就会弹出“应用程序无响应”的对话框。
12.2.2.main线程
主线程也叫UI线程,主线程负责UI的创建,UI的刷新以及处理用户的输入事件。
提示:Android规定,Activity中的控件的刷新由主线程负责,其它线程不能直接刷新。
12.2.3.ANR术语
ANR的全称:Activity or Application is not responding,当用户操作超过系统规定的响应时间时,会弹出ANR对话框,如图-3所示:
图-3
若选择Force close按钮将强制关闭当前的Activity;
若选择Wait按钮将保留当前的Activity继续等待。
出现ANR的条件:
1. 在main线程(或称主线程)中有一个耗时操作正在执行,此时用户输入事件并且这个事件在5秒内没有得到响应,就会弹出ANR。
2. 广播接收者的onReceive()方法在10秒内没有执行完成,也会弹出ANR。
提示:在广播接收者的onReceive方法中要避免执行耗时的操作。
12.2.4.示例-测试ANR发生的两种情况
创建项目exer12_02,在该类中创建MyReceiver类,该类是BroadcastRecevier的子类。
图-4
1、单击download按钮,在主线程中执行一个循环模拟从网络下载数据的操作,该循环耗时10秒,在该循环执行过程中,在图-4的标注所指的编辑框中连续试图输入字符串,5秒后,将弹出图-3所示的ANR对话框。
2、单击send broadcast按钮,发送广播,然后在图-4的标注所指的编辑框内连续试图输入字符串,10秒后将弹出ANR对话框。
以下是关键代码:
步骤1、创建工具类-CommonUtils.java,该类中定义了一个模拟耗时操作的循环,代码如下所示:

上一页  1 2 3 4 5 6 7 8  下一页

Tags:android 进程 优先级

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接