Wow, Mariano, this is great! Thanks a lot :-)


On Sat, Apr 11, 2009 at 8:52 AM, Mariano Kamp <[email protected]>wrote:

> Here is mine - no cleanup / enhancements, right from my repository. Really
> basic stuff. And it doesn't work in the emulator as there is no email
> activity.
>
> package com.newsrob;
>
>
> import java.io.PrintWriter;
>
> import java.io.StringWriter;
>
> import java.lang.Thread.UncaughtExceptionHandler;
>
> import java.util.regex.Pattern;
>
>
> import android.app.Application;
>
> import android.content.Intent;
>
> import android.os.Build;
>
> import android.util.Log;
>
>
> public class NewsRob extends Application {
>
>
>  private static final String TAG = NewsRob.class.getSimpleName();
>
> public static final boolean DEBUG = false;
>
>
>  @Override
>
> public void onCreate() {
>
> super.onCreate();
>
> Log.d(TAG, "NewsRob.onCreate()");
>
> new NewsRobDefaultExceptionHandler(EntryManager.getInstance(NewsRob.this
> ));
>
>
>  }
>
>
>  @Override
>
> public void onTerminate() {
>
> Log.d(TAG, "NewsRob.onTerminate()");
>
> super.onTerminate();
>
> }
>
>
> }
>
>
> class NewsRobDefaultExceptionHandler 
> implementsThread.UncaughtExceptionHandler {
>
>
>  private EntryManager entryManager;
>
> private UncaughtExceptionHandler oldDefaultExceptionHandler;
>
> private static final String TAG = NewsRobDefaultExceptionHandler.class
> .getSimpleName();
>
>
>  NewsRobDefaultExceptionHandler(EntryManager entryManager) {
>
> this.entryManager = entryManager;
>
> Log.d(TAG, "Default Exception Handler=" +
> Thread.getDefaultUncaughtExceptionHandler());
>
> oldDefaultExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
>
>
>  Thread.setDefaultUncaughtExceptionHandler(this);
>
>
>  }
>
>
>  public void uncaughtException(Thread t, Throwable e) {
>
> Log.e("NewsRob", "Caught the following exception: ", e);
>
> StringBuilder message = new StringBuilder(
>
> "Sorry!\n\nNewsRob hit a wall. Please send this mail, so that the developer
> can analyze/fix the issue.\nIf it is not too much to ask, please add to this
> mail what you just did:\n\n");
>
>
>  message.append(String.format("-- NewsRob Version: %s/%s\n", entryManager
> .getMyVersionName(),
>
> entryManager.getMyVersionCode()));
>
> message.append(String.format("-- Android Version: sdk=%s, release=%s,
> inc=%s\n", Build.VERSION.SDK,
>
> Build.VERSION.RELEASE, Build.VERSION.INCREMENTAL));
>
> message.append(String.format("-- Thread State: %s\n", t.getState()));
>
>
>  Job j = entryManager.getCurrentRunningJob();
>
> if (j != null)
>
> message.append(String.format("-- Job: %s\n", j.getJobDescription()));
>
>
>  if (entryManager.runningThread != null)
>
> message.append(String.format("-- Running Thread: %s\n", entryManager.
> runningThread));
>
>
>  // Add stacktrace
>
> StringWriter sw = new StringWriter();
>
> PrintWriter pw = new PrintWriter(sw);
>
> e.printStackTrace(pw);
>
> pw.close();
>
> message.append("-- Stacktrace:\n");
>
> message.append(sw.getBuffer());
>
>
>  String messageBody = message.toString();
>
>
>  // ignore certain exceptions
>
> if (Pattern.compile("CacheManager.java:391").matcher(messageBody).find())
>
> return;
>
>
>  // Prepare Mail
>
> final Intent sendIntent = new Intent(Intent.ACTION_SEND);
>
> sendIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
>
> sendIntent.setType("message/rfc822");
>
> sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "
> [email protected]" });
>
> sendIntent.putExtra(Intent.EXTRA_SUBJECT, "BugReport: " +
> e.getClass().getSimpleName() + ": "
>
> + e.getMessage());
>
> sendIntent.putExtra(Intent.EXTRA_TEXT, messageBody);
>
> Log.e(TAG, "Exception handled. Email activity should be initiated now.");
>
>
>  // Send Mail
>
> new Thread(new Runnable() {
>
>
>  public void run() {
>
> entryManager.getContext().startActivity(sendIntent);
>
> }
>
> }).start();
>
> Log.e(TAG, "Exception handled. Email should be sent by now.");
>
>
>  // Use default exception mechanism
>
> if (oldDefaultExceptionHandler != null)
>
> oldDefaultExceptionHandler.uncaughtException(t, e);
>
> }
>
> }
>
>
> On Sat, Apr 11, 2009 at 5:30 PM, Mattaku Betsujin <
> [email protected]> wrote:
>
>> Hello Mike,
>>
>> Could you share how you implemented the bug report mechanism? How can you
>> get a stack trace when the app crashes inside the UI thread?
>>
>> Thanks
>>
>>
>> On Sat, Apr 11, 2009 at 6:51 AM, Mike Hearn <[email protected]>wrote:
>>
>>>
>>> I really question what developers are doing to get so many F/C
>>> comments (and I see them on other apps all the time).
>>>
>>> I have a crash/bug reporter integrated into my app. It's not a very
>>> good one - it just uploads exception stacktraces and some data to my
>>> server when the core logic code crashes, so it doesn't even cover UI
>>> bugs.
>>>
>>> I have hundreds of reports from the wild (about 25k downloads). So
>>> obviously my app does fail. Yet, the comments on the app are all
>>> glowing, and people are remarkably willing to give 4 or 5 stars even
>>> when it didn't do quite what they wanted. I really wonder about the
>>> buggyness of apps that get significant numbers of F/C comments.
>>>
>>> It must be frustrating to see comments about bugs that you can't
>>> reproduce, but at the same time, I think some people here believe
>>> writing software is easy. It's hard. I did all kinds of testing with
>>> my app, including disrupting its network connection at various points
>>> as it runs, repeatedly sliding the screen to force activity
>>> reconstruction etc. Some bugs still slipped through, fortunately the
>>> crash reports identify them quite well as most people with problems
>>> will never even leave a comment, let alone email you to help you
>>> figure out the problem.
>>>
>>>
>>>
>>>
>>
>>
>>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Android Discuss" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/android-discuss?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to