非常にお勧めの記事:ようこそお気に入り
のAndroidドライシェア
5分、毎日10時、あなたと生涯学習を読んで、ここでのAndroidのプログラマです
この資料に記載されているAndroid
この記事を読んで知識の開発の一部を、次のことを刈り取ります。
、サービス登録されていない異常は電話が再起動する原因と
解決策登録されていない2を、サービス
2.1はContextImplクラス変更
2.2はTransportManagerクラスを変更
、サービス登録されていない異常は、再起動に電話を引き起こします
再起動セクションでは、Log
次のとおりです。
二、サービス登録されていませんソリューション
Log
分析、異常情報を見つけて、次の変更をしよう。
1.クラスContextImplを変更
ファイルパス:
\frameworks\base\core\java\android\app\ContextImpl.java
ファイル
最適化unbindService
以下のようにメソッドの実装は次のとおりです。
@Override
public void unbindService(ServiceConnection conn) {
if (conn == null) {
throw new IllegalArgumentException("connection is null");
}
if (mPackageInfo != null) {
IServiceConnection sd = mPackageInfo.forgetServiceDispatcher(
getOuterContext(), conn);
try {
ActivityManager.getService().unbindService(sd);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
// add for Service not registered unbindService() triger reboot exception
} catch (IllegalArgumentException e) {
//com.google.android.gms.ui Service not registered Crash
android.util.Log.e("wjwj","---ContextImpl GMS Crash---");
e.printStackTrace();
}
// add for Service not registered unbindService() triger reboot exception
} else {
throw new RuntimeException("Not supported in system context");
}
}
2.クラスTransportManagerを変更
以下のようにファイルのパスは次のとおりです。
frameworks\base\services\backup\java\com\android\server\backup\TransportManager.java
例外は、再起動を防ぐキャッチ。
最適化unbindService
以下のようにメソッドの実装は次のとおりです。
void onPackageRemoved(String packageName) {
// Package removed. Remove all its transports from our list. These transports have already
// been removed from mBoundTransports because onServiceDisconnected would already been
// called on TransportConnection objects.
synchronized (mTransportLock) {
Iterator<Map.Entry<ComponentName, TransportConnection>> iter =
mValidTransports.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<ComponentName, TransportConnection> validTransport = iter.next();
ComponentName componentName = validTransport.getKey();
if (componentName.getPackageName().equals(packageName)) {
TransportConnection transportConnection = validTransport.getValue();
iter.remove();
if (transportConnection != null) {
/* 360OS begin */
/* unbindService() triger reboot exception,
* catch it && add log to find out witch package do it. */
try {
Slog.d(TAG, "onPackageRemoved trace, componentName:"
+ componentName.toString(), new Throwable());
mContext.unbindService(transportConnection);
} catch (IllegalArgumentException e) {
Slog.e(TAG, "unbindService fail.", e);
}
/* 360OS end */
log_verbose("Package removed, removing transport: "
+ componentName.flattenToShortString());
}
}
}
}
}
間違った場所、あなたの提案や修正を歓迎している場合これまでのところ、本明細書に、これは、終了しました。同時に、あなたの注意を楽しみにして、お読みいただきありがとうございました、ありがとうございました!