問題タブ [android-binder]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - スレッド グループ リストに非常に多くのバインダーと asynctask があるのはなぜですか? それらはどのように管理されていますか?
セットアップ: サービス クラスとそれにバインドする 2 つのアクティビティがあります。1 つ目は、呼び出すメインの UI アクティビティです。
2 番目のアクティビティは bindService(intent, mConnection, Context.BIND_AUTO_CREATE) のみを呼び出します。
どちらも onStop() で unbindService(mConnection) を呼び出します。
メイン UI にボタン呼び出し "button A" があり、これを押すと arrayList がサービスのメソッドに渡されます。次に、サービス内のメソッドが新しい静的スレッドを開始して、この arrayList を処理します。新しいスレッドには、サービス内のメソッドと通信するための静的メッセージ ハンドラーもあります。2 番目のアクティビティは、サービスを呼び出して計算を実行し、結果をデータベースに保存します。
サービスで 1 つのスレッドのみを明示的に宣言しました。したがって、メイン スレッドを含めて合計 2 つのスレッドが必要であり、サービスにバインドするアクティビティが 2 つしかないため、バインダーは 2 つしか期待できません。ただし、メイン UI の onCreate で Thread.activeCount() を実行すると、最初は 3 つのスレッドが取得されます。後で 4 つのスレッドを取得し、次に 9 つのスレッドと 11 のスレッドが続き、以下で説明する方法で処理を進めます。
ここに質問があります。
バインダーと asynctasks はどのようにスレッド グループのリストに追加されますか? なぜ彼らは拡大し続けるのですか?バッテリーの消費が気になります。スレッドが増えるとバッテリーの消費量が増えますか? それとも、作業が速くなり、これらの自動生成されたスレッドが自分自身をガベージ コレクションしますか? メモリリークはありますか?これらのスレッドが生成される方法を制御できますか?
これに関するドキュメントはあまり見つかりませんでした。この件についてわかる方、教えてください。
アプリの最初の実行、メイン UI の onCreate で:
ThreadGroup ctg = Thread.currentThread().getThreadGroup(); ctg.list();
リストには次のものが表示されます。
main、Binder_1、Binder_2 が 3 つのアクティブなスレッドであることはわかっています。 電話の向きを変えると、logcat は次のように表示します。
次に、メイン UI の「ボタン A」を押して、新しいスレッドを作成して arraylist を処理すると、11 個のスレッドが取得されます。 Logcat ショー:
android - vmalloc.c のフラグ VM_IOREMAP はどういう意味ですか?
http://lxr.free-electrons.com/source/include/linux/vmalloc.h?v=3.4;a=arm#L11
vm_struct
in にはたくさんのフラグがありますvmalloc.c
。を理解できます。これは、 が呼び出しによって構築されるVM_ALLOC
ことを意味します。vm_struct
vmalloc()
しかし、他のフラグは何を意味するのでしょうか? 特にVM_IOREMAP
. Android バインダー ドライバーで使用されます。
http://lxr.free-electrons.com/source/drivers/staging/android/binder.c?v=3.4;a=arm#L2819
android - LogCat で「XYZ バインダーが null です」というエラー メッセージが表示されないようにします
完全に読んで、最初に私の質問を理解してください。反対票ボタンをトリガーして喜んでいます!
質問は本当に LogCat 化粧品です。Bluetooth にクラッシュや実際の問題はありません。「Bluetooth バインダーが null です」という LogCat メッセージが表示されます。Android エミュレーターで Bluetooth を使用する方法については、多くの投稿や質問があります。私はそれをすべて知っています、それは問題ではありません。私が望むのは、単に LogCat エラー メッセージを取り除くことです。現在、エミュレータで実行していると判断するための簡単な条件があります。
https://groups.google.com/forum/#!topic/android-kernel/M4SjXulUeUo
boolean isEmulator = "goldfish".equals(Build.HARDWARE);
エミュレーターのカーネル (上記のリンクを参照) が変更された場合、または条件が正しくない場合、これはそれほど素晴らしいことではありません。したがって、ライブラリまたはライブラリ内の関数の有無を判断するための派手なJavaの方法があるかもしれないので、そのような実行時にメッセージが表示されません。
boolean isBluetoothAvailable = TTLBluetoothService.isBluetoothAvailable();
android-ndk - addService() を使用しない C++ バインダー
C++ Binder API を使用して、特権のない 2 つのプロセス間で通信することはできますか?
私が見つけたすべての例 (例: https://github.com/mcr/Android-HelloWorldServiceServiceManager->addService()
)は、ルート化されていない電話で実行すると次のエラーをスローするサービスの登録に依存しています。
android - AppX が ServiceY を呼び出し、次に ServiceZ を呼び出すときの CallingUid は何ですか?
Android API ドキュメントから:Binder.getCallingUid()
処理中の現在のトランザクションを送信したプロセスに割り当てられた Linux uid を返します。AppX が ServiceY を呼び出しgetCallingUid()
、ServiceY が を呼び出すと、X の UID が取得されます。
私の質問は、AppX が ServiceY を呼び出し、ServiceY が ServiceZ を呼び出す場合、Z によって観測される呼び出し UID は何ですか?
Y と Z が同じプロセスにある場合、違いはありますか?