① android 怎么解析tra文件
对于从事Android开发的人来说,遇到ANR(Application Not Responding)是比较常见的问题。一般情况下,如果有ANR发生,系统都会在/data/anr/目录下生成trace文件,通过分析trace文件,可以定位产生ANR的原因。产生ANR的原因有很多,比如CPU使用过高、事件没有得到及时的响应、死锁等,下面将通过一次因为死锁导致的ANR问题,来说明如何通过trace文件分析ANR问题。
对应的部分trace文件内容如下:
"PowerManagerService" prio=5 tid=24 MONITOR
| group="main" sCount=1 dsCount=0 obj=0x41dd0eb0 self=0x5241b218
| sysTid=567 nice=0 sched=0/0 cgrp=apps handle=1380038664
| state=S schedstat=( 6682116007 11324451214 33313 ) utm=450 stm=219 core=1
at com.android.server.am.ActivityManagerService.broadcastIntent(ActivityManagerService.java:~13045)
- waiting to lock <0x41a874a0> (a com.android.server.am.ActivityManagerService) held by tid=12 (android.server.ServerThread)
at android.app.ContextImpl.sendBroadcast(ContextImpl.java:1144)
at com.android.server.power.PowerManagerService$DisplayBlankerImpl.unblankAllDisplays(PowerManagerService.java:3442)
at com.android.server.power.DisplayPowerState$PhotonicMolator$1.run(DisplayPowerState.java:456)
at android.os.Handler.handleCallback(Handler.java:800)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:194)
at android.os.HandlerThread.run(HandlerThread.java:60)
"Binder_B" prio=5 tid=85 MONITOR
| group="main" sCount=1 dsCount=0 obj=0x42744770 self=0x58329e88
| sysTid=3700 nice=-20 sched=0/0 cgrp=apps handle=1471424616
| state=S schedstat=( 1663727513 2044643318 6806 ) utm=132 stm=34 core=1
at com.android.server.power.PowerManagerService$DisplayBlankerImpl.toString(PowerManagerService.java:~3449)
- waiting to lock <0x41a7e420> (a com.android.server.power.PowerManagerService$DisplayBlankerImpl) held by tid=24 (PowerManagerService)
at java.lang.StringBuilder.append(StringBuilder.java:202)
at com.android.server.power.PowerManagerService.mp(PowerManagerService.java:3052)
at android.os.Binder.mp(Binder.java:264)
at android.os.Binder.onTransact(Binder.java:236)
at android.os.IPowerManager$Stub.onTransact(IPowerManager.java:373)
at android.os.Binder.execTransact(Binder.java:351)
at dalvik.system.NativeStart.run(Native Method)
"android.server.ServerThread" prio=5 tid=12 MONITOR
| group="main" sCount=1 dsCount=0 obj=0x41a76178 self=0x507837a8
| sysTid=545 nice=-2 sched=0/0 cgrp=apps handle=1349936616
| state=S schedstat=( 15368096286 21707846934 69485 ) utm=1226 stm=310 core=0
at com.android.server.power.PowerManagerService.isScreenOnInternal(PowerManagerService.java:~2529)
- waiting to lock <0x41a7e2e8> (a java.lang.Object) held by tid=85 (Binder_B)
at com.android.server.power.PowerManagerService.isScreenOn(PowerManagerService.java:2522)
at com.android.server.wm.WindowManagerService.(WindowManagerService.java:7749)
at com.android.server.wm.WindowManagerService.setEventDispatching(WindowManagerService.java:7628)
at com.android.server.am.ActivityManagerService.updateEventDispatchingLocked(ActivityManagerService.java:8083)
at com.android.server.am.ActivityManagerService.wakingUp(ActivityManagerService.java:8077)
at com.android.server.power.Notifier.sendWakeUpBroadcast(Notifier.java:474)
at com.android.server.power.Notifier.sendNextBroadcast(Notifier.java:455)
at com.android.server.power.Notifier.access$700(Notifier.java:62)
at com.android.server.power.Notifier$NotifierHandler.handleMessage(Notifier.java:600)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:194)
at com.android.server.ServerThread.run(SystemServer.java:1328)
从trace文件看,是因为TID为24的线程等待一个TID为12的线程持有的锁,TID为12的线程等待一个TID为85的线程持有的锁,而TID为85的线程确等待一个TID为24的线程持有的锁,导致了循环等待的现象,对应的trace文件的语句如下:
TID 24:- waiting to lock <0x41a874a0> (a com.android.server.am.ActivityManagerService) held by tid=12 (android.server.ServerThread)
TID 12: - waiting to lock <0x41a7e2e8> (a java.lang.Object) held by tid=85 (Binder_B)
TID 85:- waiting to lock <0x41a7e420> (a com.android.server.power.PowerManagerService$DisplayBlankerImpl) held by tid=24 (PowerManagerService)
既然是死锁,那么先看各线程都有那些锁。
先看TID=24的线程的栈顶,ActivityManagerService的broadcastIntent函数代码如下:
public final int broadcastIntent(IApplicationThread caller,
Intent intent, String resolvedType, IIntentReceiver resultTo,
int resultCode, String resultData, Bundle map,
String requiredPermission, boolean serialized, boolean sticky, int userId) {
enforceNotIsolatedCaller("broadcastIntent");
synchronized(this) {
intent = verifyBroadcastLocked(intent);
final ProcessRecord callerApp = getRecordForAppLocked(caller);
final int callingPid = Binder.getCallingPid();
final int callingUid = Binder.getCallingUid();
final long origId = Binder.clearCallingIdentity();
int res = broadcastIntentLocked(callerApp,
callerApp != null ? callerApp.info.packageName : null,
intent, resolvedType, resultTo,
resultCode, resultData, map, requiredPermission, serialized, sticky,
callingPid, callingUid, userId);
Binder.restoreCallingIdentity(origId);
return res;
}
可以看到TID=24需要ActivityManagerService这个锁。再看TID=12线程的栈顶,PowerManagerService的isScreenOnInternal函数代码如下:
private boolean isScreenOnInternal() {
synchronized (mLock) {
return !mSystemReady
|| mDisplayPowerRequest.screenState != DisplayPowerRequest.SCREEN_STATE_OFF;
}
}
可以看到需要PowerManagerService的mlock这个锁。最后看TID=85线程的栈顶,同样在PowerManagerService里面,内部类DisplayBlankerImpl的toString函数:
public String toString() {
synchronized (this) {
return "blanked=" + mBlanked;
}
}
这是在内部类DisplayBlankerImpl里面实现的,所以需要DisplayBlankerImpl这个锁。
对应的表格如下:
表一 各线程等待的锁情况
从表一来看,没有出现死锁现象,似乎并不是我们所想的那样。难道不是死锁?开始有点小怀疑自己了,难道别的原因导致的。也许只看调用堆栈的顶端可能不行,栈顶只能看出各线程需要的锁,不能仅看自己要什么吧!一味索取可不好!人不是这样做的!看一下整个的堆栈调用流程,看看自己拥有了那些锁。
跟踪TID=24线程的堆栈,在PowerManagerService内部类DisplayBlankerImpl的unblankAllDisplays函数中持有锁:
public void unblankAllDisplays() {
synchronized (this) {
nativeSetAutoSuspend(false);
nativeSetInteractive(true);
mDisplayManagerService.();
mBlanked = false;
///M: add for tvout and hdmi
mTvOut.tvoutPowerEnable(true);
mHDMI.hdmiPowerEnable(true);
///@}
if (DEBUG) {
Slog.d(TAG_P, "unblankAllDisplays out ...");
}
if (mBootCompleted) {
Intent intent = new Intent(ACTION_LOCK_SCREEN_SHOW);
mContext.sendBroadcast(intent);
}
}
}
最后发送广播的代码,是我们自己添加的。根据unblankAllDisplays函数和broadcastIntent函数,可以看到TID=24的线程此时持有了DisplayBlankerImpl锁(unblankAllDisplays),等待ActivityManagerService锁(broadcastIntent)释放。
同样,跟踪TID=12线程的堆栈,在ActivityManagerService的wake_up函数中持有锁:
public void wakingUp() {
if (checkCallingPermission(android.Manifest.permission.DEVICE_POWER)
!= PackageManager.PERMISSION_GRANTED) {
throw new SecurityException("Requires permission "
+ android.Manifest.permission.DEVICE_POWER);
}
synchronized(this) {
Slog.i(TAG, "wakingUp");
mWentToSleep = false;
updateEventDispatchingLocked();
comeOutOfSleepIfNeededLocked();
}
}
根据wakingUp函数和isScreenOnInternal函数,可以看到TID=12的线程持有ActivityManagerService锁(wakingUp),等待PowerManagerService.mLock锁(isScreenOnInternal)。到这,似乎看到了希望,迷雾要拨开了,有点小自信是死锁导致的,但还不能最终下结论。
一鼓作气,跟踪TID=85线程的堆栈,在PowerManagerService的mp有持有锁的操作:
protected void mp(FileDescriptor fd, PrintWriter pw, String[] args) {
....
synchronized (mLock) {
...
}
根据toString函数和mp函数,可以看到TID=85线程此时持有PowerManagerService.mLock锁(mp),需要DisplayBlankerImpl(toString)。
② android的Progressbar怎么用
Android提供的ProgressBar Widget控件与ProgressDialog应用目标不同,在程序一开始即可在main.xml
Layout当中布局,先将部署在Layout里的ProgressBar的属性设为隐藏(一开始看不见),而后使用进程来“假装”程序忙碌中,但不同的是,可在进程当中取得运行时的进度,在“运行”的过程中,将运行进度通过TextView显示出来。本范例除了学习ProgressBar
Widget的显示及使用之外,另一个学习关键则是Handler的使用,因为新起的进程无法访问Activity里的Widget,也无法将运行状态外送出来,所以需要通过Handler及Message对象,将进程里的状态往外传递,最后由Activity的Handler事件接收取得运行的状态。
一、范例程序
src/irdc.ex04_17/EX04_17.java
为了让Thread运行过程中,可以不断地将信息往Activity传递,所以用了Android.os.Handler对象及Android.os.Message对象,且在类成员变量中声明了两个整数:GUI_STOP_NOTIFIER与GUI_THREADING_NOTIFIER,这两个整数将作为信息传递出来时的信号标识,前者为当Thread需要喊停的时候处理,后者为进程正在运行过程中所需处理的标识。
程序中设计了一个按钮,此按钮的工作是让原本部署在main.xml里的ProgressBar显示出来(原来是设置为Android:visibility="gone"),而因为默认在main.xml中没有指定它的indeterm-
inate属性,所以即便在程序中强制调用了ProgressBar的setIndeterminate()方法,也无法改变ProgressBar.getProgress()的值,这个值将永远为0。因此,笔者想要使用循环图片动画作为运行过程中的动画,并用了一个Counter(整数)来递增,表示运行的百分比。
代码如下:
/* import程序略 */
public class EX04_17 extends Activity
{
private TextView mTextView01;
private Button mButton01;
private ProgressBar mProgressBar01;
public int intCounter=0;
/* 自定义Handler信息代码,用以作为标识事件处理 */
protected static final int GUI_STOP_NOTIFIER = 0x108;
protected static final int GUI_THREADING_NOTIFIER = 0x109;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mButton01 = (Button)findViewById(R.id.myButton1);
mTextView01 = (TextView)findViewById(R.id.myTextView1);
/* 设置ProgressBar widget对象 */
mProgressBar01 = (ProgressBar)findViewById(R.id.myProgressBar1);
/* 调用setIndeterminate方法赋值indeterminate模式为false */
mProgressBar01.setIndeterminate(false);
/* 当单击按钮后,开始进程工作 */
mButton01.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
/* 单击按钮让ProgressBar显示 */
mTextView01.setText(R.string.str_progress_start);
/* 将隐藏的ProgressBar显示出来 */
mProgressBar01.setVisibility(View.VISIBLE);
/* 指定Progress为最多100 */
mProgressBar01.setMax(100);
/* 初始Progress为0 */
mProgressBar01.setProgress(0);
/* 开始一个进程 */
new Thread(new Runnable()
{
public void run()
{
/* 默认0至9,共运行10次的循环语句 */
for (int i=0;i<10;i++)
{
try
{
/* 成员变量,用以识别加载进度 */
intCounter = (i+1)*20;
/* 每运行一次循环,即暂停1秒 */
Thread.sleep(1000);
/* 当Thread运行5秒后显示运行结束 */
if(i==4)
{
/* 以Message对象,传递参数给Handler */
Message m = new Message();
/* 以what属性指定User自定义 */
m.what = EX04_17.GUI_STOP_NOTIFIER;
EX04_17.this.myMessageHandler.sendMessage(m);
break;
}
else
{
Message m = new Message();
m.what = EX04_17.GUI_THREADING_NOTIFIER;
EX04_17.this.myMessageHandler.sendMessage(m);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}).start();
}
});
}
/* Handler构建之后,会监听传来的信息代码 */
Handler myMessageHandler = new Handler()
{
// @Override
public void handleMessage(Message msg)
{
switch (msg.what)
{
/* 当取得标识为离开进程时所取得的信息 */
case EX04_17.GUI_STOP_NOTIFIER:
/* 显示运行终了 */
mTextView01.setText(R.string.str_progress_done);
/* 设置ProgressBar Widget为隐藏 */
mProgressBar01.setVisibility(View.GONE);
Thread.currentThread().interrupt();
break;
/* 当取得标识为持续在进程当中时所取得的信息 */
case EX04_17.GUI_THREADING_NOTIFIER:
if(!Thread.currentThread().isInterrupted())
{
mProgressBar01.setProgress(intCounter);
/* 将显示进度显示于TextView当中 */
mTextView01.setText
(
getResources().getText(R.string.str_progress_start)+
"("+Integer.toString(intCounter)+"%)/n"+
"Progress:"+
Integer.toString(mProgressBar01.getProgress())+
"/n"+"Indeterminate:"+
Boolean.toString(mProgressBar01.isIndeterminate())
);
}
break;
}
super.handleMessage(msg);
}
};
}
二、扩展学习
范例程序中,调用mProgressBar01.setIndeterminate(false),不显示背景进度Bar,若设置为mProgressBar01.setIndeterminate(true),也无法让默认的ProgressBar图片(转圈圈)有正确的进度提示,理由是默认的ProgressBar不支持indeterminate
mode循环图片方式,所以即便setIn-
determinate(true)也无法正确显示进度。在本程序中,为刻意写出作为对照练习,一般在未知“进度”的情况下,可改用文字的方式显示进度百分比,通过调用mProgressBar01.getProgress()取得运行进度值,显示在文字中。请将Layout里的ProgressBar
Widget定义中,加上一个android:
indeterminateOnly属性,指定其值为false,不显示后台进度Bar.
如下所示:
③ Android-DataBinding原理分析
在MainActivity中,调用下面的方法:
appuildintermediatesdata_binding_layout_info_type_mergedebugout
可以看到,这里定义了多个Target标签,这些Target的定义,其实就是定义对应的tag,将tag与activity_main.xml布局中的对应的View的id对应起来
经过DataBinding变化后的布局,会多出tag。
app/build/imtermediates/incremental/mergeDebugResources/stripped.dir/layout/activity_main.xml
其实DataBindingUtil的setContentView()方法,主要就是调用activity的setContentView设置布局,并且绑定添加对应的View
这里的sMapper是一个DataBinderMapper对象,其实现类是DataBinderMapperImpl
DataBinderMapperImpl是通过apt注解处理器生成的。
这里的sMapper.getDataBinder()其实就是调用的MergedDataBinderMapper的getDataBinder()方法
而sMapper中的数据,其实就是DataBinderMapperImpl的构造器中调用其父类MergedDataBinderMapper 的addMapper()方法添加的对象
在DataBinding中有两个DataBinderMapperImpl类,一个是上面这个在androidx.databinding包下,继承了MergedDataBinderMapper的,另一个是在com.example.databindingdemo应用包下,直接继承DataBinderMapper。其实MergedDataBinderMapper也是继承自DataBinderMapper
这里要注意两点,就是如果是布局的顶层View,比如tag为layout/activity_main_0,那么就会new一个ActivityMainBindingImpl对象。这个tag,其实可以从前面看到的app/build/imtermediates/incremental/mergeDebugResources/stripped.dir/layout/activity_main.xml布局中的LinearLayout的tag知道
在new出ActivityMainBindingImpl对象后,则进行一些View的绑定操作,将通过tag取出的View与ActivityMainBindingImpl中对应的View属性进行绑定。
在这里,会调用了一个mapBindings方法,第三个参数是一个3,这个3的意思,就是activity_main.xml布局文件中有3个节点
mapBindings就会返回一个Object[] bindings数组。
这里的主要工作,就是将布局中的View保存在对应的bindings数组中,然后取出这个数组中的数据赋值给ActivityMainBindingImpl中的View
ActivityMainBindingImpl的父类ActivityMainBinding是在Eappuildgenerateddata_binding_base_class_source_包下
BR的作用: 其实BR的作用,就用BR中的属性值来标记不同的操作需要的监听在mLocalFieldObservers数组中的位置
这里的localFieldId=0,这个id其实就BR文件中的id,就是BR文件中对应的静态final属性的值。而第二个就是观察者对象,比如传入的ViewModel对象。
这里通过WeakListener监听器中的ObservableReference对象保存观察者与被观察者,当被观察者发生改变的时候,就会找到对应的WeakListener监听器,然后通知观察者做修改。
而ObservableReference方法的实现,有多个,比如:WeakPropertyListener。
这里让WeakListener.setTarget()其实就是通过WeakPropertyListener给被观察者添加callback,然后当被观察者数据发生改变的时候,被观察者通过遍历其内部的PropertyChangeRegistry中的OnPropertyChangedCallback回调(其实就是WeakPropertyListener),然后通过WeakPropertyListener监听通知给ViewDataBinding以及其实现类ActivityMainBindingImpl具体进行数据的处理和设置。
// 这里的mTarget其实是一个泛型T对象,而这个泛型是在WeakPropertyListener初始化WeakListener的时候传入的一个Observable,这个是databinding中的Observable,其子类实现就是BaseObservable
WeakPropertyListener中的addListener方法,就会给Observable添加一个callback回调,向Observable这个被观察者中添加callback的目的,就是在Observable数据发生变化的时候,遍历Observable中的mCallbacks这个callback集合,通知观察者进行修改。
从这第三步可以知道:
而WeakPropertyListener和WeakListener是相互持有的对方的引用。
在完成监听的相互绑定关系,并且给Observable添加了回调之后,就会回到ActivityMainBindingImpl的setUser()方法继续执行notifyPropertyChanged()方法。
但是这里的例子有个问题,就是监听是添加在User这个BaseObservable的子类中的,但是更新的时候,并不是通过这个User来进行通知,而是根据ActivityMainBindingImpl这个BaseObservable来通知,那么这个时候并不会通过ActivityMainBindingImpl的调用notifyPropertyChanged()最终拿到User中的PropertyChangeRegistry对象mCallbacks,所以起作用的并不是这句话。而最终ActivityMainBindingImpl在设置User起刷新作用,是因为super.requestRebind()的调用也触发了mRebindRunnable任务的执行,其实就是没有通过PropertyChange来触发requestRebind()
这里其实就是调用的BaseObservable的notifyPropertyChanged()方法,因为ActivityMainBindingImpl是ViewDataBinding的子类,而ViewDataBinding继承了BaseObservable类
这里的mNotifier.notifyCallback其实就会调用到下面的PropertyChangeRegistry中定义的NOTIFIER_CALLBACK 属性中的onNotifyCallback实现,而这里的callback其实就是WeakPropertyListener,因为WeakPropertyListener是OnPropertyChangedCallback的子类,这里其实会回调给mLocalFieldObservers数组中所有的WeakListener
从mListener中取出target,而这里的mListener其实就是,WeakListener,而每个被观察者,其实都是有一个对应的LocalFieldId,这个id就是BR文件中定义的,刚才的流程中,我们传入的是0,所以这里的 mLocalFieldId=0
这里的onFieldChange的方法的实现,就是在ActivityMainBindingImpl.java中
这里因为fieldId=0,所以会进入第一个if条件if (fieldId == BR._all),所以会返回true,所以就会返回到ViewDataBinding.java中的handleFieldChange方法中,继续执行requestRebind()
这里最终都会执行mRebindRunnable的run()方法。只不过SDK版本大于等于16的时候,会采用Choreographer编舞者来处理,而之前的版本则是采用Handler来执行。
在这里最终就会执行到executeBindings()方法,而该方法的实现,又是在ActivityMainBindingImpl.java中
如果自定义类继承了BaseObservable类,则会更新注册监听。即BaseObservable保存PropertyChangeRegistry对象,该对象中会保存WeakPropertyListener监听,而WeakPropertyListener监听会持有WeakListener,WeakListener也会持有WeakPropertyListener,并且持有一个BaseObservable的target,这个target就是自定义的BaseObservable子类实现对象,在设置target的时候就会将WeakPropertyListener监听给保存在这个target中的PropertyChangeRegistry对象中,当使用自定义的BaseObservable进行更新的时候,就可以通过监听回调的方式通知到ActivityMainBindingImpl这些ViewDataBinding中,然后向ActivityMainBindingImpl解析得到的View实体中设置对应的数据。
通过WeakListener监听器中的ObservableReference对象保存观察者与被观察者,当被观察者发生改变的时候,就会找到对应的WeakListener监听器,然后通知观察者做修改。
而ObservableReference方法的实现,有多个,比如:WeakPropertyListener。
这里让WeakListener.setTarget()其实就是通过WeakPropertyListener给被观察者添加callback,然后当被观察者数据发生改变的时候,被观察者通过遍历其内部的PropertyChangeRegistry中的OnPropertyChangedCallback回调(其实就是WeakPropertyListener),然后通过WeakPropertyListener监听通知给ViewDataBinding以及其实现类ActivityMainBindingImpl具体进行数据的处理和设置。
其实就是向ViewModel或者自定义的Observable(是databinding中的Observable)的子类实现中的mCallbacks中添加监听WeakPropertyListener,用于数据变化回调。而在WeakPropertyListener中的WeakListener对象会保存这个Observable为target,用于在更新的时候取出。
比如在xml布局的data中直接使用Boolean、Integer、String等类型
如果ActivityMainBindingImpl中设置的是比如ViewModel,那么就需要看是否使用了LiveData修饰的属性,如果没有使用LiveData的,则并不会去更新注册监听信息,而只是重新保存ViewDataBinding中保存的数据实体,并且直接调用ActivityMainBinding中保存的View实体进行设置新的数据
如果是使用了LiveData的话,则会在调用LiveDataListener(这是一个Observer子类与上面的WeakPropertyListener类似)的addListener的时候,就会给LiveData注册观察者LiveDataListener,然后在LiveDataListener中的onChanged实现中通过调用ViewDataBinding的handleFieldChange方法触发数据变化修改,进而更新View显示的数据
④ 在android的linux驱动中,有probe函数,会在其中调用INIT_WORK,而在INIT_WORK的参数中会有一个函数
probe is called when driver initialization completed.
notify_event is uevent
⑤ android trace 文件怎么分析
对于从事Android开发的人来说,遇到ANR(Application Not Responding)是比较常见的问题。一般情况下,如果有ANR发生,系统都会在/data/anr/目录下生成trace文件,通过分析trace文件,可以定位产生ANR的原因。产生ANR的原因有很多,比如CPU使用过高、事件没有得到及时的响应、死锁等,下面将通过一次因为死锁导致的ANR问题,来说明如何通过trace文件分析ANR问题。
对应的部分trace文件内容如下:
"PowerManagerService" prio=5 tid=24 MONITOR
| group="main" sCount=1 dsCount=0 obj=0x41dd0eb0 self=0x5241b218
| sysTid=567 nice=0 sched=0/0 cgrp=apps handle=1380038664
| state=S schedstat=( 6682116007 11324451214 33313 ) utm=450 stm=219 core=1
at com.android.server.am.ActivityManagerService.broadcastIntent(ActivityManagerService.Java:~13045)
- waiting to lock <0x41a874a0> (a com.android.server.am.ActivityManagerService) held by tid=12 (android.server.ServerThread)
at android.app.ContextImpl.sendBroadcast(ContextImpl.java:1144)
at com.android.server.power.PowerManagerService$DisplayBlankerImpl.unblankAllDisplays(PowerManagerService.java:3442)
at com.android.server.power.DisplayPowerState$PhotonicMolator$1.run(DisplayPowerState.java:456)
at android.os.Handler.handleCallback(Handler.java:800)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:194)
at android.os.HandlerThread.run(HandlerThread.java:60)
"Binder_B" prio=5 tid=85 MONITOR
| group="main" sCount=1 dsCount=0 obj=0x42744770 self=0x58329e88
| sysTid=3700 nice=-20 sched=0/0 cgrp=apps handle=1471424616
| state=S schedstat=( 1663727513 2044643318 6806 ) utm=132 stm=34 core=1
at com.android.server.power.PowerManagerService$DisplayBlankerImpl.toString(PowerManagerService.java:~3449)
- waiting to lock <0x41a7e420> (a com.android.server.power.PowerManagerService$DisplayBlankerImpl) held by tid=24 (PowerManagerService)
at java.lang.StringBuilder.append(StringBuilder.java:202)
at com.android.server.power.PowerManagerService.mp(PowerManagerService.java:3052)
at android.os.Binder.mp(Binder.java:264)
at android.os.Binder.onTransact(Binder.java:236)
at android.os.IPowerManager$Stub.onTransact(IPowerManager.java:373)
at android.os.Binder.execTransact(Binder.java:351)
at dalvik.system.NativeStart.run(Native Method)
"android.server.ServerThread" prio=5 tid=12 MONITOR
| group="main" sCount=1 dsCount=0 obj=0x41a76178 self=0x507837a8
| sysTid=545 nice=-2 sched=0/0 cgrp=apps handle=1349936616
| state=S schedstat=( 15368096286 21707846934 69485 ) utm=1226 stm=310 core=0
at com.android.server.power.PowerManagerService.isScreenOnInternal(PowerManagerService.java:~2529)
- waiting to lock <0x41a7e2e8> (a java.lang.Object) held by tid=85 (Binder_B)
at com.android.server.power.PowerManagerService.isScreenOn(PowerManagerService.java:2522)
at com.android.server.wm.WindowManagerService.(WindowManagerService.java:7749)
at com.android.server.wm.WindowManagerService.setEventDispatching(WindowManagerService.java:7628)
at com.android.server.am.ActivityManagerService.updateEventDispatchingLocked(ActivityManagerService.java:8083)
at com.android.server.am.ActivityManagerService.wakingUp(ActivityManagerService.java:8077)
at com.android.server.power.Notifier.sendWakeUpBroadcast(Notifier.java:474)
at com.android.server.power.Notifier.sendNextBroadcast(Notifier.java:455)
at com.android.server.power.Notifier.access$700(Notifier.java:62)
at com.android.server.power.Notifier$NotifierHandler.handleMessage(Notifier.java:600)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:194)
at com.android.server.ServerThread.run(SystemServer.java:1328)
从trace文件看,是因为TID为24的线程等待一个TID为12的线程持有的锁,TID为12的线程等待一个TID为85的线程持有的锁,而TID为85的线程确等待一个TID为24的线程持有的锁,导致了循环等待的现象,对应的trace文件的语句如下:
TID 24:- waiting to lock <0x41a874a0> (a com.android.server.am.ActivityManagerService) held by tid=12 (android.server.ServerThread)
TID 12: - waiting to lock <0x41a7e2e8> (a java.lang.Object) held by tid=85 (Binder_B)
TID 85:- waiting to lock <0x41a7e420> (a com.android.server.power.PowerManagerService$DisplayBlankerImpl) held by tid=24 (PowerManagerService)
⑥ android的Progressbar怎么用
在Android中系统提供了多种Progressbar供开发者使用,开发者可以根据下面这个方法使用Progressbar控件(系统是windows7,开发工具为Android studio)。
1、首先使用Android studio打开一个项目,如下图:
⑦ 安卓开发 手机号码拦截
目前中国市场,骚扰电话大量的充斥手机用户的生活,因此手机安全软件的电话拦截功能受到广泛关注和使用。但第三方应用级电话拦截功能的效果并不理想,比如拦截电话时已经响了一声、或出现短暂的来电界面,多款安全软件同时存在时可能发生冲突等,其本质原因是目前的第三方应用无法及时的、快速的判断出来电事件,拦截不及时造成的。现在@安卓安全小分队就分析其中的原理,并给出我们自己的解决方案。
一、原理分析
1、Android来电流程
上图中间框图中给出的是Android系统来电流程。方框的上部分(包括蓝色方框)是App层,下部分(粉色方框)为framework层。当有incoming call发生时,RIL层会将incoming call事件向上报给CallTracker。在CallTracker中,incoming call事件将会通过两条路向上层走。
i)上图方框中黄色箭头所示路线。通过PhoneNotifier->TelephonyRegistry将PHONE_STATE_CHANGED通知上去。第三方应用通过SDKAPI注册listener(PhoneStateListener),监听framework层TelephonyRegistry发出的PHONE_STATE_CHANGED通知。若call state从CALL_STATE_IDLE变成CALL_STATE_RINGING,则说明有电话打入,且打入的电话号码会包含在广播出来的intent中。
第三方安全软件的拦截功能就是通过这一原理检测到有来电以及该来电的号码(其拦截点为图中灰色方框所示)。若号码为黑名单号码,则将来电hangup。
ii)上图方框中红色箭头所示路线。通过PhoneBase->CallManager->CallNotifier->InCallScreen,即从framework->PhoneApp,将NewRingingConnection通知上去。
2、第三方应用级方案缺点
i)黑名单打入电话时,可能会有来电界面。
这是由于第三方应用只能通过左边黄色流程的PHONE_STATE_CHANGED来判断是否有来电并拦截,其拦截点比较晚,可能会出现右边红色路线已经走到InCallScreen,即来电界面已出现,左边的第三方应用才将电话hangup,用户体验不好。
ii)手机上同时存在多款安全软件时可能存在冲突。
若各个安全软件的黑名单各不相同时,若一个号码N是安全软件A的黑名单,但不是安全软件B的黑名单。由于拦截时机晚,当号码N打入时,B也会检测到有来电且无需拦截,就有可能做一系列的操作而导致此时N有可能会被接通。因此,多款安全软件的情况下,不能杜绝每个黑名单中的号码一定会被拦截掉。
二、优化和改进
针对第三方应用级方案拦截优先级低、时间延迟严重的情况,我们可以从系统入手,通过在底层拦截来提前拦截时间、提高拦截优先级,使用户根本无法感知拦截过程,在手机屏幕上不会有任何变化。
我们从底层对两条路线都做“拦截”(如上图左右两个绿色方框所示):
1、针对上图右边红色箭头所示流程,在底层PhoneBase中进行hook,每当有来电发生时,通知到我们自己的service(如上图右边绿色service方框所示),PhoneBase根据service的返回结果进行处理。具体如下:
1.1)在framework中添加一个service(上图右边绿色Service绿色方框所示),并授予它root权限。该service起来之后,等待client端的请求。并对client端暴露了一套SDK API接口(上图右边SecuritySDK API绿色方框所示):
接口:ITelephonyListener
booleanonIncomingCall(String phoneNumber, int simId);// callback
(ITelephonyListener listener, int events)//注册监听器
1.2) app实现并注册电话监听器,当来电发生时,PhoneBase通知监听器,监听器返回是否需要拦截,PhoneBase根据返回值处理。
2、针对上图左边黄色所示流程,在PhoneNotifier中进行拦截,当有黑名单来电发生时根据一定的规则,阻止phone state向上通知。
根据以上分析可知,我们的拦截在incomingcall流程的底层“静默”进行拦截,时机早,优先级高,上层用户无法感知拦截过程。并且若手机上有多个安全软件同时存在时,我们的拦截可以杜绝其他安全软件检测到来电,防止了手机上多个安全软件的冲突问题。
⑧ android 怎么直接启用电话来电了,如别人没给我打电话,我怎么直接启用接听,就是让CallNotifier直接启用
设置,自动接听。
⑨ 安卓手机自带的系统应用哪些可以删除,都是字母不了解是干嘛的,竟然有100多个,已经ROOT了
额,建议你网络下“你的机型 精简列表”
然后特表需要注意的是,系统级别的app不能删除,例如拨号设置短信等。删除主要的依据是看图标。你根据图标识别下都是什么软件,例如那些内置推广软件都是可以删掉的,什么商城,联通移动的软件都是可以删除的。还有的方法就是,一般国内的厂商的系统都做了odex优化,就是把一个apk拆成了两个,所以在****.apk 下还会有个 *****.odex。但是后来加入的内置软件就不会有。所以你可以删除那些没有odex的软件。
下面是网上收集的apk精简列表,建议看看了解就是,不懂的别乱删。删坏了麻烦。
AccountAndSyncSettings.apk 帐户与同步设置 可删
AppInstaller.apk 程序安装 建议保留
Applicati**Provider.apk 应用程序支持 不可删
Bluetooth.apk 蓝牙 可替代
BluetoothDun.apk 蓝牙拨号 可替代
AlarmClock.apk 原生闹钟 建议保留,这个挺好的
Calendar.apk 日历 可删
CalendarProvider.apk 日历存储 可删
Camera.apk 原生相机 建议保留
Contacts.apk 联系人 建议保留
ContactsSync.apk 通讯录同步 建议保留
Dialer.apk 拨号器 可替代,可以用智能拨号等替代
Email.apk 电子邮件 可删
EmailEngine.apk 电子邮件引擎 可删
Home.apk 主屏幕 不要Blur一定要删
BlurPhone.apk 原生拨号 不可删
Browser.apk 浏览器 可替代
Calculator.apk 计算器 可替代
CalendarSync.apk 日历同步 可删
CarDock.apk 车载底座 可删
CertificateManager.apk 证书管理 建议保留
CertificateProvider.apk 证书供应商 建议保留
35 CertInstaller.apk 证书安装服务 建议保留
36 ClientUpgradeService.apk 客户升级服务 可删
37 B ClockWidget.apk 日期时间部件 可删
38 B CMP.apk 连接音乐播放器 可删
39 B CMP_AmazonUK_InternalFM_1.0.179.apk 网络电台 可删
40 CompassCalibrate.apk 指南针校准 建议保留
41 ContactsData.apk 通讯录数据 不可删
42 ContactsProvider2_0.apk 通讯录存储 不可删
43 ContactsUnconnected.apk 未知联系人 建议保留
44 B Conversati**.apk 文本信息 建议保留
45 Da**anagerApp.apk 数据管理器 不可删
46 Da**anagerService.apk 数据管理服务 不可删
47 DefaultContainerService.apk 默认容器服务 不可删
48 DLNA.apk DLNA媒体 可删
49 DlnaSystemService.apk DLNA媒体共享服务 可删
50 DMService.apk 设备管理服务 不可删
51 Dock.apk 桌面主屏幕 可删
52 DownloadProvider.apk 下载管理器 不可删
53 B DrmProvider.apk 数字版权 建议保留
54 esmusica.apk 建议保留
55 esmusica_2_0_0012_embed_Signed_2010-04-13_11-05-17.apk 建议保留
56 FileManager.apk 文件 可删
57 FileManagerH.apk OI文件管理器 可删
58 FirewallService.apk 防火墙 建议保留
59 FMRadioService.apk FM服务 建议保留
60 Fota.apk 在线软件升级 可删
61 B FriendFeed.apk 社交网络部件 可删
62 GenieWidget.apk 资讯与天气 可删
63 Gfw**er.apk 谷歌服务连接助手 可删
64 GlobalUnplug.apk 全局拔除 建议保留
65 Gmail.apk Gmail 建议保留
66 GoogleBackupTransport.apk 建议保留
67 GoogleCalendarSyncAdapter.apk 建议保留
68 GoogleContactsSyncAdapter.apk 谷歌联系人同步适配器 建议保留
69 GoogleFeedback.apk 建议保留
70 GooglePartnerSetup.apk 谷歌合作伙伴设置 建议保留
71 GoogleQuickSearchBox.apk 建议保留
72 GoogleServicesFramework.apk 谷歌服务框架 建议保留
73 GOTV_Altitude.apk 建议保留
74 HiApkMarket.apk 安卓市场 可删
75 HiapkSettings.apk 安卓相关 可删
76 B hiphopofficial.apk 建议保留
77 B hiphopofficial_2_0_0012_embed_Signed_2010-04-13_11-08-31.apk 建议保留
78 HomeKey.apk 快捷任务 建议保留
79 HomeSyncWizard.apk 媒体共享 可删
80 HTMLViewer.apk 不可删
81 IndexingService.apk 不可删
82 InPocketService.apk 放入口袋检测 建议保留
83 KPT.apk 柯达晶彩 可删
84 Latin.apk MOTO英文输入法 可替代
85 LiveWall**s.apk 动态壁纸 可保留
86 LiveWall**sPicker.apk 动态壁纸选择 可保留
87 LMIRescue.apk 建议保留
88 LMIRescueSecurity.apk 建议保留
89 LocationProxyDmPlugin.apk 网络位置 建议保留
90 MagicSmokeWall**s.apk 魔幻烟雾动态壁纸 可删
91 Maps.apk 地图 可删
92 MarketAccess.apk 电子市场区域 建议保留
93 MarketUpdater.apk 电子市场软件更新 建议保留
94 B MasterClearErrorReport.apk 清除错误报告 可删
95 MEAD.apk 测试模式 不可删
96 MediaGallery.apk 媒体库 建议保留
97 MediaProvider.apk 媒体播放 不可删,铃音相关
98 MediaSync.apk 媒体同步 可删
99 MediaUploader.apk 我上传的内容 可删
100 B MessagesWidget.apk 信息部件 可替代
101 B Messaging.apk 信息 可替代
102 MotHstcmd.apk 建议保留
103 MotoAtCmdEpuPlugin.apk MOTO AT命令扩展 建议保留
104 MotoAtCmdPlugin.apk MOTO AT命令… 建议保留
105 MotoAttAtCmdPlugin.apk MOTO AT命令… 建议保留
106 MotoImeTutorial.apk MOTO输入法教程 可删
107 MotoPhonePortal.apk MOTO手机门户 建议保留
108 MotorolaSettingsProvider.apk 设置存储 不可删
109 MotoSmartHandWriting.apk MOTO手写输入 可替代
110 M**changeService.apk 微软ECHANGE服务 可删
111 MtlrNotifier.apk MTLR媒体通知 可删
112 Mynet.apk 3G热点 可删
113 NetworkLocation.apk 网络位置 建议保留
114 NewsWidget.apk 新闻部件 可删
115 oma1motService.apk OMA模块 建议保留
116 OMADownload.apk OMA通讯服务下载 建议保留
117 OMAProvisioning.apk OMA服务配置 建议保留
118 OverlaySettingsProvider.apk 多重设置 不可删
119 PackageInstaller.apk A打包安装服务 不可删
120 PandaHome2.0_V1.7.1_hiapk.apk 熊猫桌面 可删
121 PerformanceManager.apk 任务管理器 可替代
122 PhoneAdd**.apk 拨号插件 不可删
123 PhoneConfig.apk 拨号配置 不可删
124 PhotoWidget.apk 相框部件 可删
125 PicoTts.apk 语音合成引擎 建议保留
126 Pinyin.apk MOTO拼音输入 可替代
127 PolicyMgrProvider.apk 谷歌搜索 可删
128 PolicyMgrService.apk 谷歌搜索服务 可删
129 Protips.apk 安卓小部件主屏提示 可删
130 B QuickContactWidget.apk 联系人快速任务 可删
131 B Quickoffice.apk 办公软件 可删
132 QuickSms.apk 快捷信息 可删
133 B revolver.apk 建议保留
134 B revolver_2_0_0012_embed_Signed_2010-04-13_11-07-08.apk 建议保留
135 RichTextCommon.apk 剪贴版 建议保留
136 ScreenReader.apk 残疾人辅助 可删
137 Settings.apk 设置 不可删
138 Setup.apk 帐户 不可删
139 SetupProvider.apk 帐户存储 不可删
140 SetupWizard.apk 开机设置向导 可删
141 SimContactAdapter.apk SIM卡联系人配置 可删
142 SimManager.apk SIM卡管理器 可删
143 B SocialMessaging.apk 新鲜事 可删
144 B SocialShare.apk 新鲜事共享 可删
145 SoundRecorder.apk 录音 建议保留
146 SpellingCheckService.apk 拼写检查 可删
147 StartController.apk 连接控制器 不可删
148 B StatusWidget.apk 社交状态部件 可删
149 B StickyNoteWidget.apk 便签部件 建议保留
150 B Stk.apk STK管理器 可删
151 StorageMonitorService.apk 存储检测设置 不可删
152 Street.apk 街景 可删
153 Superuser.apk 授权管理 不可删
154 Switcher.apk MOTO输入法开关 可替代
155 SyncMLTmo.apk 不可删
156 SystemUpdater.apk 系统更新 建议保留
157 Talk.apk GoogleTalk 建议保留
158 Tasks.apk 任务 可删
159 TelephonyProvider.apk 电话管理器 不可删
160 B Term.apk 超级终端 可替代
161 B ToggleWidgets.apk 控制部件 建议保留
apk 语音文字转换 建议保留
165 UniversalInbox.apk 通用收件箱 建议保留
166 Upgrader.apk 升级工具 建议保留
167 Usb.apk USB连接管理 不可删
168 UserDictionaryProvider.apk 用户字典 建议保留
169 Vending.apk 电子市场 建议保留
170 VideoPlayer.apk 视频播放器 可替代
171 Visualization.apk 可视化特效 可删
172 VisualizationWall**s.apk 音乐壁纸 可删
173 VoiceSearch.apk 语音搜索 建议保留
174 ***Client.apk ***虚拟网 可删
175 ***Services.apk ***虚拟网服务 建议保留
176 WapPushSI.apk 浏览器信息 可删
177 B WeatherWidget.apk 天气部件 可删
178 B WmdrmDla.apk 媒体数字权限 可删
179 B WmdrmWebpush.apk 媒体服务支持 可删
184 ZoomService.apk 缩放服务 可删
⑩ 如何判断一个Android设备具有打开附件模式
我用"SuperOneClickv2.2-ShortFuse" ROOT成功。 特别强调:root诚可贵,系统价更高!获得最高权限后,无限意淫可以,删软件要慎重! 下面是我参考的教程。。。。 引用—————————————————————————————— ——————————————————————————————引用 应该是机锋首发的哈! 三星 I8150的Root办法很简单哈,使用SuperOneClick就OK了,各位老鸟可直接绕行。 首先,手机设置里面开启USB调试,方法:桌面--选项--设置--应用程序--开发--勾选“USB调试”。这一步骤需要在手机未与电脑连线的状态下设置哈。 然后,确认电脑上已经安装过三星的手机驱动程序,论坛里有,也找得到哈(有机油说不安装也可以root成功的,但是建议安装一下驱动哈) 最后,把手机开机后,连接到电脑,首先将电脑上的各种防火墙各种杀毒软件关闭,然后在电脑上解压附件中的rar文件,然后运行解压出来的SuperOneClick.exe,点击root按钮,然后等待几分钟程序运行结束后(我记得最后一步运行成功后会弹出提示框询问是否将成果donate,选是或者否都不影响root的哈),重启手机,就OK了!大家就可以看到,功能表列表中SuperUser(授权管理)出现了! 有机油反应杀毒软件提示有病毒的问题,这是因为电脑上的root破解程序使用的溢出算法,都会被杀毒软件检测为木马。直接无视之,关掉杀毒软件即可! 经过多次测试,均完美root哈!步骤非常简单,就不上截图了,各位机油自己整吧! ________________________________________ 手机成功ROOT之后,要先在手机上安装一个RE文件管理器,即Root Explorer,见附件。 安装成功后,打开RE,这时候Super User(授权管理)会提示RE需要获取最高权限,点击“允许”。进入RE浏览器,首先要确认在最上方,将RE挂载为R/W Mode(读写模式),而不是默认的只读模式。 在RE根目录中显示的文件夹中有两个主要文件夹:一个是‘sdcard’,即内存卡,该目录里面有一个文件夹名为‘external_sd’,对应的即为手机外置扩展的SD卡。RE根目录下的另一个文件夹,‘system’文件夹,即为系统文件夹,系统自带程序,系统美化,界面DIY,系统优化等等对应的文件和操作都在这个文件夹里。 OK,下面简单介绍一下system文件夹下的几个主要文件夹: app:系统自带的各种程序,包括安卓系统的基本固件程序和系统ROM里自带的程序 Fonts:系统里支持的字体。关于字体的更改其实主要就是将下载的字体文件放到这里面并修改相应权限 Framework: 这里面的各种文件关系到系统的UI,比如锁屏,比如下拉状态栏,比如拨号键盘界面,等等,难以尽述。关于系统的界面优化美化其实主要就是修改这个文件夹里面的framework等文件。 media:里面是系统自带的媒体文件,notifications,alarms,ringtones就是系统自带的通知铃声和来电铃声,如果要释放系统空间,可将这三个文件夹剪切至SD卡的任意位置,均不影响系统铃声的使用。 好,下面进入正题,讲一下如何删除system/app中的系统自带程序: 首先要说的是,不建议各位机油将程序直接删除,建议在sdcard中新建一个备份文件夹,将要删除的程序移动至该文件夹。这样一旦删除有误或者哪天想要用系统的自带程序了,将其用RE再移动回app文件夹即可。 其次要说的是,对于app中有的程序,只有一个apk文件包。但有的程序,不仅有一个程序apk文件,还有一个同名的odex文件,要删除该程序,需要将这两个文件全部从app文件夹中移除,否则就可能会出现系统报错。另外,对于有的程序,还有其widget文件的apk文件(即桌面小挂件),如要删除该程序,需要将app文件夹中对应的widget的apk文件也一并移除,否则也会出现系统报错,打个比方,要删除一个名为samsung的程序,可能要移除三个或四个文件:samsung.apk,samsung.odex以及samsungwidget.apk以及samsungwidget.odex。 下面说一下如何找到程序对应的apk文件:其实有两个最基本的办法,第一,就是根据程序的英文名称自己判断;第二,也是最直观的办法,就是在app文件夹中,该apk文件的图标通常与功能表中的程序图标是一模一样的或者几乎一样的。 特别提示: 1.系统自带的基本功能固件对应的apk文件千万不要删除,比如bluetooth,phone,message,clock,wifi等等,否则可能就要重新刷机了。。 2.要删除系统自带的一些程序以使用第三方程序替代,强烈建议先安装好第三方程序,然后再删除app文件夹中的系统自带程序,以免系统报错崩溃。例如,要删除系统自带的三星输入法,强烈建议先安装一个第三方输入法,比如搜狗手机输入法,然后再在app文件夹中删除三星输入法所对应的相关apk文件及odex文件等。 3.三星I8150自带了几个什么影视圈阅读圈社交圈的,其实就是给整合了几个同类软件,要删除这几个程序的话需要将他整合的程序也在app文件夹中找到并移除。例如,删除阅读圈这个程序,不仅仅要删除app文件夹中的阅读圈那个图标对应的apk文件等等,还要删除其整合的ireader,蜜蜂新闻所对应的apk文件等,否则就可能系统报错。 4.最后,再次建议各位机油采取将要删除的程序文件剪切至sd卡的备份文件夹中,而不要直接删除。。。。 再给大家友情推荐一款任务管理器---Advanced Task Manager(高级任务管理器),一键关闭正在运行的进程,可以设置例外程序,可以添加桌面快捷按钮,一键关进程,个人认为是安卓平台最给力的任务管理类软件。 然后,关于手机用的杀毒软件,强烈推荐LBE安全大师,机油们可以直接网络,有官方网站的,附件中是最新版的,11月20号更新的。相比之下,360手机卫士麻花藤手机安全管家神马的实在是太垃圾了。。。我就不吐槽了。。。 OK,大家可以好好享受手机轻装上阵的感觉了,我的I8150其实是给我老婆买的,入手之后我便给他优化掉了100多M得系统空间,默认情况下在ATM中后台运行的程序只有7个,哇咔咔。手机在老婆手里,就不上传截图了哈~~~ ___________________________________________ i8150 root后 该保留的程序。 AccountAndSyncSettings.apk 可删 谷歌账户同步设置,需要同步谷歌帐户的朋友请不要删除服务,谷歌服务之一,无图标,无组件 AccuWeatherDaemonService.apk 可删 天气插件,与系统自带的动态天气壁纸有关服务,无图标,无组件 AlertRecipients.apk 可删 未知,就名字来看应该是发出短信后,收件人收到短信后,我们得到的回执服务,无图标,无组件 AmsComposer.apk 可删 动感短信,移动的一项业务可打10086咨询程序,有图标,无组件 **ogClock.apk 可删 桌面时钟插件,有多种钟表样式,需要的勿删插件,无图标,有组件 AndroidQQ_Samsung_Seine.apk 可删 QQ,原厂自带的 QQAlipayGphone.apk 可删 支 付宝,原厂自带的支 付宝程序 ApplicationsProvider.apk 保留 应用程序支持服务系统服务,无图标,无组件,切记不要删除 --------------------B-------------------- BadgeProvider.apk 保留 标志提供者,删除后短信等崩溃系统服务,无图标,无组件,切记不要删除 BluetoothAvrcp.apk 可删 蓝牙设备遥控,注意这个程序删除后会出现FC,重起后就好了。据反馈说删除后会造成使用车载蓝牙死机,请自行测试。服务,无图标,无组件 BluetoothOPP.apk 保留 蓝牙相关程序服务,无图标,无组件 BluetoothPbap.apk 保留 蓝牙相关程序服务,无图标,无组件 BluetoothTestMode.apk 可删 蓝牙测试模式服务,无图标,无组件 BrcmBluetoothService.apk 保留 蓝牙相关程序服务,无图标,无组件 Browser.apk 代替 自带浏览器,三星对自家的浏览器优化的还是不错的,WIFI和3G情况下个人感觉比海豚好用,可以用UC等代替,建议备用程序,有图标,有组件 BuddiesNow.apk 可删 好友现况窗口小插件,这个东西未测试,大家可以试试插件,无图标,有组件 --------------------C-------------------- CalendarProvider.apk 代替 谷歌日历储存器,删除了它机器自带的日历就不能用了,也可以用365日历+等代替服务,无图标,无组件 CallSetting.apk 保留 电话设置服务,无图标,无组件 Camera.apk 代替 照相机,可满足大家的日常需要,也可用其他照相软件代替程序,有图标,无组件 CertInstaller.apk 保留 证书安装工具,具体也不知道是做什么用的,所以建议保留服务,无图标,无组件 ClockPackage.apk 代替 时钟,闹钟,三星自带的闹钟有响前提醒使用很棒,起床时可用“起床”声音轻轻的唤醒你,大家可以试试,不推荐删除,也可用正点闹钟等代替。程序,有图标,无组件 Contacts.apk 代替 联系人,可用其他联系人软件代替程序,有图标,无组件 ContactsProvider.apk 保留 联系人存储器服务,无图标,无组件 cooldict.apk 代替 词酷,原厂自带的英汉词典,基本能满足需要,建议用云词、有道词典代替程序,有图标,无组件 CSC.apk 保留 管理CSC的工具,这个建议保留,服务,无图标,无组件 --------------------D-------------------- DataCreate.apk 可删 删除后系统跳到开机的“S闪”然后就进桌面了服务,无图标,无组件 Days.apk 可删 迷你日记插件插件,无程序,有组件 DefaultContainerService.apk 保留 媒体容器服务服务,无图标,无组件 DigitalClock.apk 可删 桌面数字时钟插件,无图标,有组件 Divx.apk 可删 视频解码器,删除后未发现视频无法播放服务,无图标,无组件 Dlna.apk 可删 多媒体无线分享,可以通过WIFI来实现用手机来播放电脑里共享的视频程序,有图标,无组件 DownloadProvider.apk 代替 谷歌浏览器下载管理,如果更换浏览器的话可以删除服务,无图标,无组件 DownloadProviderUI.apk 代替 谷歌浏览器下载管理UI,如果更换浏览器的话可以删除服务,无图标,无组件 DrmProvider.apk 可删 版权管理服务,无图标,无组件 DrmUA.apk 可删 数字版权管理服务,无图标,无组件 DualClock.apk 可删 桌面双时钟插件,经常出国的朋友可以用到,删除 ClockPackage.apk的话可能造成无法使用插件,无图标,有组件。 --------------------E-------------------- Email.apk 代替 电子邮件,喜欢收邮件的朋友不要删除程序,有图标,无组件 EmailWidget.apk 可删 电子邮件的桌面插件插件,无图标,有组件 Encrypt.apk 可删 加密的东西,还没发现是干什么用的服务,无图标,无组件 factoryTest.apk 可删 系统复位功能,我们都会WIPE,没什么用服务,无图标,无组件 FMRadio.apk 可删 FM调频收音机,必须插上耳机才能使用,信号还行,看个人需要程序,有图标,无组件 FTC.apk 可删,建议保留未知服务,无图标,无组件 FTM.apk 可删,建议保留WLAN sharing manager服务,无图标,无组件 FTS.apk 可删,建议保留WIFI共享,这个根据个人需要来决定是否删除服务,无图标,无组件 --------------------G-------------------- Gallery3D.apk 代替 3D相册,机器自带的看图软件在兔子上灰常好用,速度很快,个人认为没有必要用快图,也可用快图等代替程序,有图标,有组件 glyder2.apk 可删未知,不知道是什么东东 Gmail.apk 可删 谷歌邮件程序程序,谷歌服务之一,有图标,无组件 GoogleBackupTransport.apk 可删 谷歌设置备份,可以把你的设置备份到网上服务,谷歌服务之一,无图标,无组件 GoogleCalendarSyncAdapter.apk 可删 谷歌日历同步配置器,删除了它就不能同步日历了服务,谷歌服务之一,无图标,无组件 GoogleContactsSyncAdapter.apk 可删 谷歌联系人同步配置器,删除了它就不能同步联系人了服务,谷歌服务之一,无图标,无组件 GoogleFeedback.apk 可删 谷歌市场反馈代理程序,不知道是做什么用的服务,谷歌服务之一,无图标,无组件 GooglePartnerSetup.apk 可删 谷歌合作伙伴设置,不知道是做什么用的服务,谷歌服务之一,无图标,无组件 GoogleQuickSearchBox.apk 可删 谷歌搜索,快速搜索程序,谷歌服务之一,有图标,有组件 GoogleServicesFramework.apk 可删 谷歌服务框架,删除了它,你就什么都不能同步了服务,谷歌服务之一,无图标,无组件 --------------------H-------------------- HTMLViewer.apk 可删 本地网页查看器,貌似是可以把网页下载到本机看,没试过服务,无图标,无组件 --------------------I-------------------- ImgoTV.apk 可删未知,不知道是什么东东 InputEventApp.apk 可删 输入事件管理器,不知道是什么东东,删除它没发现有什么影响服务,无图标,无组件 install_flash_player.apk 可删 Flash播放器,删除后无法播放FLASH程序,有图标,无组件 iReader.apk 可删 爱读,看TXT小说的,阅读圈内置应用,删了阅读圈就无法使用,版本太老,建议另行安装程序,有图标,无组件 --------------------J-------------------- JobManager.apk 代替 系统自带任务管理器,可用其它代替程序,有图标,无组件 --------------------K-------------------- kaixin001.apk 可删 原厂自带开心网客户端 Kies.apk 可删 三星套件KIES服务,无图标,无组件 KiesAir.apk 可删KIES无线客户端,可以用WIFI访问手机程序,有图标,无组件 kieswifi.apk 可删 KIES无线连接,删了它KiesAir.apk就不能用了服务,无图标,无组件 Kobo.apk 可删 KOBO阅读器程序,无图标,无组件 --------------------L-------------------- lcdtest.apk 可删 屏幕测试服务,无程序,无组件 liveWallpapers.apk 可删 动态壁纸,删除了就没动态壁纸了服务,无程序,无组件 LiveWallpapersPicker.apk 可删 动态壁纸选择器,删除了就没动态壁纸了服务,无程序,无组件 LogsProvider.apk 保留 系统日志支持服务服务,无程序,无组件 --------------------M-------------------- MediaHub.apk 可删 影视圈程序,有图标,无组件 Maps.apk 可删 谷歌地图,不解释,大家都知道,不过我用自带的高德程序,谷歌服务之一,有图标,有组件 MarketUpdater.apk 可删 谷歌市场软件升级服务,谷歌服务之一,无图标,无组件 MediaProvider.apk 保留 媒体数据存储,删除了就不能换铃声了服务,无图标,无组件 MediaUploader.apk 可删 上传的内容,不知道是做什么用的服务,无图标,无组件 Memo.apk 代替 Memo备忘录,机器自带的,能满足日常需要,可用同类软件代替程序,有图标,无组件 Microbesgl.apk 可删 微生物动态壁纸服务,无图标,无组件 MiniDiary.apk 可删 迷你日记,初次使用必须联网,看个人需要程序,有图标,无组件 MinimalHome.apk 可删 未知 Mms.apk 代替 短信信息,可用GO短信代替程序,有图标,无组件 MmsProvisioning.apk 可删 短信相关,删除后不影响服务,无图标,无组件 MobilePrint.apk 可删 移动打印,不知道怎么用服务,无图标,无组件 MobileTrackerEngineTwo.apk 可删 手机**,实用性有待考验(我想没人愿意试验)服务,无图标,无组件 MobileTrackerUI.apk 可删 手机**界面服务,无图标,无组件 mreader.apk 可删 貌似是阅读器 MtpApplication.apk 可删 三星KIES后台服务服务,无图标,无组件 MusicPlayer.apk 代替 音乐播放器,可用其它软件代替程序,有图标,有组件 MyFiles.apk 保留 MyFile文件管理,如果不是从系统设置里更换铃声必须要用到,我肯定删除程序,有图标,无组件 --------------------N-------------------- Navigator.apk 可删 自带 高 德 导航,不喜欢程序,有图标,无组件 NetworkLocation.apk 可删 网络位置,可以加快GPS搜星速度服务,无图标,无组件 --------------------P-------------------- PackageInstaller.apk 保留 打包安装程序服务,无图标,无组件 PanningTryActually.apk 可删未知 PCWClientS.apk 可删未知,注意删除后会出现FC,重起后就好了服务,无图标,无组件 Personalization.apk 可删 个人设置服务,无图标,无组件 Phone.apk 保留 拨号器,删除了它你就别打电话了程序,有图标,无组件 Phone_Util.apk 可删 电话设备服务,无图标,无组件 PhoneCrashNotifier.apk 可删未知 PhoneErrService.apk 可删 电话错误服务服务,无图标,无组件 PhotoRetouching.apk 可删 图片编辑,看个人需要程序,有图标,无组件 PicoTts.apk 可删 用不到语音朗读的可删服务,无图标,无组件 PopupuiReceiver.apk 可删 未知 PostIt.apk 可删 迷你记事插件插件,无图标,有组件 Preconfig.apk 可删 预先配置服务,无图标,无组件 PressReader.apk 可删 报纸阅读、天气程序,有图标,有组件 Protips.apk 可删 绿色机器人桌面提示插件,无图标,有组件 Provision.apk 可删 未知 PRUI.apk 可删未知 --------------------Q-------------------- QQBrowser_samsung.apk 可删 原厂自带的QQ浏览器未知,O大的ROM里没见过 QuickSearchBox.apk 可删 系统自带的搜索程序,有图标,有组件 QuickView.apk 保留 快速查看,相机拍照后可以快速预览服务,无图标,无组件 QYVideoClient.apk 可删 奇艺影视 ,看网络视频用的 --------------------R-------------------- ReadersHub.apk 可删 阅读圈,里面集成了看杂志,小说及新闻的软件,不过版本较老程序,有图标,无组件 Renren.apk 可删 人人网 --------------------S-------------------- SamsungApps.apk 可删 三星市场,三星自家的APP市场程序,有图标,无组件 SamsungAppsUNAService.apk 可删 三星市场服务服务,无图标,无组件 SamsungIM.apk 可删 三星聊天工具,很强大,可以用多种帐号程序,有图标,无组件 SamsungIME.apk 可删 三星原厂输入法服务,无图标,无组件 SamsungWidget_ProgramMonitor.apk 可删 任务管理桌面插件插件,无图标,有组件 ScreenCaptureService.apk 可删 三星截图后台服务,删除了它就不能截图了服务,无图标,无组件 SecDownloadProvider.apk 代替 下载存储器,使用系统自带浏览器的不要删除服务,无图标,无组件 SecretWallpaper1.apk 可删 动态天气壁纸,需要AccuWeatherDaemonService.apk支持服务,无图标,无组件 SecretWallpaper2.apk 可删 动态天气壁纸,需要AccuWeatherDaemonService.apk支持服务,无图标,无组件 SecurityProvider.apk 可删 安全储存器服务,无图标,无组件 selfreg.apk 可删 未知服务,无图标,无组件 SelfTestMode.apk 可删 自检模式服务,无图标,无组件 SerialNumberLabelIndicator.apk 可删未知服务,无图标,无组件 serviceModeApp.apk 可删未知服务,无图标,无组件 Settings.apk 保留 系统设置,你删删试试?程序,有图标,无组件 SettingsProvider.apk 保留 系统设置存储器服务,无图标,无组件 SevenEngine.apk 可删未知服务,无图标,无组件 ShareApp.apk 可删 应用共享服务,无图标,无组件 shutdown.apk 可删 关机,用不到服务,无图标,无组件 signin.apk 可删 三星账号登陆与三星市场是一套的服务,无图标,无组件 Sinamicroblog.apk 可删 SinaNews.apk 可删 SinaStock.apk 可删 SinaWeather.apk 可删 新浪微薄、新闻、股票、天气插件,无图标,有组件 SisoDrmProvider.apk 保留 删除后造成闹钟关闭时失去响应服务,无图标,无组件 SMTEngine.apk 可删未知服务,无图标,无组件 SMTSetup.apk 可删未知服务,无图标,无组件 SnsAccountKx.apk 可删 SnsAccountRr.apk 可删 SnsDisclaimer.apk 可删 SnsImageCache.apk 可删 SnsProvider.apk 可删 社交程序相关,没什么用服务,无图标,无组件 SocialHub.apk 可删聊天和EMAIL程序用的服务服务,无图标,无组件 SoundPlayer.apk 代替 音乐播放器,可以用别的软件代替程序,无图标,无组件 SpeechRecorder.apk 可删未知服务,无图标,无组件 Stk.apk 可删 S I M 工具包,有 一 卡 多 号 的不要删除程序,有图标,无组件 Street.apk 可删 谷歌街景地图程序,谷歌服务之一,有图标,有组件 Superuser.apk 保留 超级用户,没了它ROOT也没用程序,有图标,无组件 syncmldm.apk 可删 系统更新后台服务服务,无图标,无组件 syncmlds.apk 可删 同步到web服务器后台服务服务,无图标,无组件 SystemUI.apk 保留 支持桌面服务,无图标,无组件 --------------------T-------------------- Talk.apk 可删 GTalk程序,谷歌服务之一,有图标,无组件 TasksProvider.apk 可删 任务存储 服务,无图标,无组件 TelephonyProvider.apk 保留 电话记录器服务,无图标,无组件 Tencentmicroblog.apk 可删 腾迅微博 Term.apk 可删 Terminal Emulator 终端仿真程序服务,无图标,无组件 thinkdroid.apk 可删 办公软件,原厂自带的office软件程序,有图标,无组件 TomEbook.apk 可删 TOM杂志,没用过 Tonghuashun.apk 可删 同花顺,炒股用的 TouchWiz30Launcher.apk 代替三星的桌面程序,可用GO桌面等代替服务,无图标,无组件 TouchWizCalculator.apk 可删 计算器,自带的,够用了程序,有图标,无组件 TouchWizCalendar.apk 代替 系统自带日历,可用其它软件代替程序,有图标,无组件 TrimApp.apk 可删未知服务,无图标,无组件 TtsService.apk 可删 语音朗读服务器(用不到语音的删)服务,无图标,无组件 TwCalendarAppWidget.apk 可删 日历插件插件,无图标,有组件 TwWallpaperChooser.apk 保留 墙纸库选择器(自带壁纸),删除了就不能换壁纸了服务,无图标,无组件 --------------------U-------------------- UserDictionaryProvider.apk 可删 用户自定义词典,没什么用服务,无图标,无组件 --------------------V-------------------- Vending.apk 可删 谷歌电子市场,可以下载程序程序,谷歌服务之一,有图标,有组件 VideoEditor.apk 可删 视频编辑,可以编辑拍摄的视频程序,有图标,无组件 VideoPlayer.apk 代替 视频播放器,自带的就够用,也可用MOBO播放器等代替程序,有图标,无组件 viva_tts.apk 可删 VIVA杂志,看杂志用的,阅读圈程序之一程序,无图标,无组件 VoiceRecorder.apk 可删 录音机,O大的ROM里很好用,建议保留,也可用别的代替程序,有图标,无组件 VoiceSearch.apk 可删 语音搜索,实用性不强程序,有图标,无组件 VoiceDialer.apk 可删 语音拨号,实用性不强服务,无图标,无组件 V P NServices.apk 可删 科学上网服务服务,无图标,无组件 --------------------W-------------------- wipereceiver.apk 可删 三星远程清除手机信息后台服务服务,无图标,无组件 WlanTest.apk 可删 WIFI测试工具服务,无图标,无组件 wssomacp.apk 可删 未知服务,无图标,无组件 wssyncmlnps.apk 可删 未知服务,无图标,无组件 Youku_Samsung_seine.apk 可删 优酷视频,不用解释