ブロードキャストシステムandroidセキュリティ:flag FLAG_RECEIVER_REGISTERED_ONLYの意味

3591 ワード

初心者が投稿して、多くの方面はすべて入門したばかりで、間違いがある地方はみんなに許してもらって、批判の指摘を歓迎します
    
時計widgetを作った友達はACTIONに対応すべきだ.TIME_TICKはよく知っていて、みんなこの放送でUIインタフェースの时間を更新していますが、新しいバージョンのandroidでは、TIME_TICK放送が制約され、システムはAndroid Manifestで許可されなくなった.xml面内静的册注receiver来接TIME_TICKが放送され、プログラマーたちはダイナミックブックの式方を取ってTIME_を傍受するように迫られた.TICK放送.皆さんはこの状況に遭遇したとき、どんな感想を持っていますか?
Googleがコードを変更したと文句を言っているかもしれませんが、ダイナミックブックは簡単に失効します.程進はメモリ不足でkillに失われる可能性があります.
これは開発者に迷惑をかけたのではないでしょうか.
Googleはなぜ突然xml式の方冊注TIMEを取ることを許さないのか.TICKは?
    
    TIME_TICK放送はalarmManagerServiceが送信したものですが、ソースコードを見てみましょう.
     AlarmManagerService.java
public AlarmManagerService(Context context) {

        mContext = context;

        mDescriptor = init();



        // We have to set current TimeZone info to kernel

        // because kernel doesn't keep this after reboot

        String tz = SystemProperties.get(TIMEZONE_PROPERTY);

        if (tz != null) {

            setTimeZone(tz);

        }



        PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);

        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);

        

        mTimeTickSender = PendingIntent.getBroadcast(context, 0,

                new Intent(Intent.ACTION_TIME_TICK).addFlags(

                        Intent.FLAG_RECEIVER_REGISTERED_ONLY), 0);

        Intent intent = new Intent(Intent.ACTION_DATE_CHANGED);

キー・オフ・コードは次のとおりです.
mTimeTickSender = PendingIntent.getBroadcast(context, 0,

                new Intent(Intent.ACTION_TIME_TICK).addFlags(

                        Intent.FLAG_RECEIVER_REGISTERED_ONLY), 0);

もともとGoogleはintentにFLAGを入れていましたRECEIVER_REGISTERED_ONLYというflagは、xml帳注が間違っている理由です.
    
ラジオACTIONを見てみましょうSCREEN_ON/OFF
    void com.android.server.PowerManagerService.initInThread()
    
void initInThread() {  

    ……  

    mScreenOnIntent = new Intent(Intent.ACTION_SCREEN_ON);  

    mScreenOnIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);  

    mScreenOffIntent = new Intent(Intent.ACTION_SCREEN_OFF);  

    mScreenOffIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);  

    ……  

}

毎日同じ理屈
ヒマラヤは空を突き進んでいるが、上には登山者の旗がある.サハラ砂漠は見渡す限り果てしなく広がっているが、面には跋渉者の足跡がある.アルプスの壁には千尋が立っているが、その中に探検者の姿がある.ヤルチブ川は流れが激しいが、その中に勇敢な人の物語がある.
    
もう一つ放送を見て、ACTION_BATTERY_CHANGED
    
バッテリーの電力量が変化した場合、システムはこの放送を送信します.
    
void com.android.server.BatteryService.sendIntent()
private final void sendIntent() {  

    //  Pack up the values and broadcast them to everyone  

    Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);  

    intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY  

            | Intent.FLAG_RECEIVER_REPLACE_PENDING);  

    ……  

}

見たか?flag FLAGを追加しましたRECEIVER_REGISTERED_ONLY.
すなわち,これらのシステムブロードキャストは動的ブックのみである.
Googleがこのようにした目的についてお話しします.
多くの毒病プログラムは、自分が停止した後に再び運行できることを証明するために、xmlにいくつかのシステム放送を登録し、これらのシステムの高周波放送を利用して自動起動を実現しようとしている.
例えば、古いバージョンのandroidシステムでは、毒病プログラムはTIME_を傍受することができます.TICKは自分のサービスバックグラウンドを動かして、秘密の仕事をして、しかも自分がkillに失われても、すぐに再開することができます.
これらのシステムブロードキャストがflag FLAGを追加するとRECEIVER_REGISTERED_ONLY、これらの毒病のプログラムは仕方がない.
Googleのこの修正はandroidシステムのセキュリティを向上させたに違いない.
プログラミング言語についてC++がハンマーであれば、プログラミングは大きな指になります.100万匹のサルを探して100万個のキーボードを叩くと、Javaプログラムを叩くサルがいて、残りはPerlプログラムを叩くだけです.急いでドアをノックする音がした.「誰だ!」5分後、ドアの外から「Java」が聞こえてきた.Javaが素晴らしいのは、すべてのオペレーティングシステムで動作できるからだとすれば、肛門交際はすべての性別で使用できるので、とても良いと言えます.