1

私はAndroidが初めてです。現在のバッテリー残量を表示するウィジェットを作成したいと考えています。いくつかのチュートリアルを読んだ後、私は次のことを行いました。AppWidgetProvider を拡張するクラスを作成しました。その onUpdate および onEnabled メソッドで、インテント フィルター ACTION_BATTERY_CHANGED を使用してブロードキャスト レシーバーを登録しました。onRecieve メソッドでは、TextView が現在のバッテリー レベルで更新されます。

どうぞ:

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[]      appWidgetIds) 
{

    ComponentName cn = new ComponentName(context, BatteryAppWidgetProvider.class);
    context.getApplicationContext().registerReceiver(this, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    appWidgetManager.updateAppWidget(cn, this.views);

}


@Override
public void onReceive(Context context, Intent intent) {

        Integer level = intent.getIntExtra("level", -1);
        this.views.setTextViewText(R.id.battery_level, level.toString() + "%");
        ComponentName cn =
            new ComponentName(context, BatteryAppWidgetProvider.class);
        AppWidgetManager.getInstance(context).updateAppWidget(cn, this.views);

    super.onReceive(context, intent);
}

@Override
public void onEnabled(Context context) {
    super.onEnabled(context);
    context.getApplicationContext().registerReceiver(this, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}

そして、それはしばらくの間機能します - DDMS で見ることができます。しかし、しばらくすると、または他の多くのアプリケーションを起動した後. プロセスが DDMS から消えます。Androidはメモリを解放するために削除しているだけだと思います。問題は、どうすればこれを回避できるかということです。プロセスを常に有効にするにはどうすればよいですか?

4

2 に答える 2

2

ユーザーがウィジェット/アプリケーションと対話していないときに Android に実行させたいことがある場合は、サービスを使用する必要があります。

Android サービス

ユーザーの操作を必要としないタスクに使用することを意図しており、特に何かを何度も確認するのに最適です。OSが最終的にそれを強制終了しないという保証はありませんが、可能な限り生き続けます.

于 2012-06-11T19:19:10.027 に答える
1

これを回避できる唯一の方法は、サービスを開始して使用するstartForeground()ことです。これにより、OSがサービスを強制終了する可能性が低くなりますが、停止しないことは保証されません. また、実行中であることを示す通知を通知バーに永続的に表示する必要があります。

サービスについてはこちら

要するに、殺されるのを止めることはできません

于 2012-06-11T19:18:50.010 に答える