6

電話の再起動時にBroadcastReceiverをデバッグするために、いくつかの方法を試しましたが、機能せず、次のようにリンクします

BOOT_COMPLETEブロードキャストレシーバーの「ForceClose」クラッシュをデバッグする方法は? フォースクローズクラッシュ

4

2 に答える 2

2

おそらくこれは最善の方法ではありませんが、同様の問題があり、ブートレシーバーのonReceiveメソッドの開始時に30秒のスリープ機能を使用したため、DDMSパースペクティブのプロセスリストに移動して配置する時間がありました私のアプリはデバッグモードなので、onReceiveメソッドの最初の実際の命令のブレークポイントがヒットしました。この助けを願っています

于 2012-12-13T08:20:59.730 に答える
0

以前と同じ状況で、Androidデバイスでユーザーが使用しているときに、ブロードキャストレシーバー、実行中のサービス、アプリのクラッシュなどに関するアプリケーションログの詳細を知りたいと思いました。

[したがって、このコードを使用すると、ブロードキャストレシーバーの起動、停止、クラッシュなどの情報を取得できます]

私は自分のLogCatを作成しましたが、それはうまく機能しています。ここにコードが役立つかもしれません

まず、アプリの定数ファイルにいくつかの定数を入れる必要があります

public static final String LOG_DIR="/SeedSpeak/LOG";
public static final String LOG_MODE_EXCEPTION="exception";
public static final String LOG_MODE_INFO="info";

次に、アプリのUtillファイルに3つのメソッドを作成する必要があります

public static void MyLog(String logMode, String msgKey, Object msgValue) {

        File sdCard = Environment.getExternalStorageDirectory();
        File dir = new File(sdCard.getAbsolutePath()+ 

                           SeedSpeakConstants.LOG_DIR);
        if (!dir.exists()) {
            dir.mkdirs();
        }

        String logFileAbsPath = dir + File.separator + "SeedSpeakLog.txt";


        BufferedWriter bufferedWritter = null;
        try {
            bufferedWritter = new BufferedWriter(
                                           new FileWriter(logFileAbsPath,
                    true));
            String logValue = null;
            if (logMode.equalsIgnoreCase(
                         SeedSpeakConstants.LOG_MODE_EXCEPTION)) {
                logValue = logStackTrace((Throwable) msgValue);
            } else {
                logValue = msgValue.toString();
            }
            logValue = currentDateTimeValue() + ": " + logMode +
                                      " :" + msgKey + ":  "
                    + logValue + "\n";
            bufferedWritter.write(logValue);
            bufferedWritter.newLine();
            bufferedWritter.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }


    public static String logStackTrace(Throwable t) {
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw, true);
        t.printStackTrace(pw);
        pw.flush();
        sw.flush();
        return sw.toString();
        }


    public static String currentDateTimeValue() {

        SimpleDateFormat formatter = 
                        new SimpleDateFormat("yyyy-mm-dd-HH:mm:ss");
        formatter.setLenient(false);

        Date curDate = new Date();      
        String curTime = formatter.format(curDate);

        return curTime;
    }

さて、これをプロジェクトで使用する方法はとても簡単です:)

注:ここで、TAGはこのような現在のファイル(アクティビティ/サービス/ BR)名です

private final static String TAG = "PlantSeedActivity";

(1)。印刷専用情報(BR、サービス開始かどうか.. bla bla)ログの場合はこれを使用します

SeedSpeakUtill.MyLog(SeedSpeakConstants.LOG_MODE_INFO, 
                             TAG + ".onCreate", "Service is started now");

(2)。印刷の例外/クラッシュの詳細については、この方法を使用してください

try{
// todo here
}
catch (Exception ex) 
{           

SeedSpeakUtill.MyLog(SeedSpeakConstants.LOG_MODE_EXCEPTION, 
                                 TAG + ".onStartCommand", ex);


}

これで、アプリをAndroidデバイスに配置し、ログの詳細を取得する場合は、SeedSpeakLog.txtファイルに移動してアプリケーションをデバッグします。


または、GoogleがACRA (Android用アプリケーションクラッシュレポート)ライブラリを提供していると聞いたもう1つの方法

あなたはこれこのリンクを見てみたいと思うかもしれません

これをグレードアップするのに問題があれば、PLにコメントさせてください!!

于 2012-12-13T06:43:10.290 に答える