builder.append("At thread: ").append(thread.getName())
.append(“\n”);
builder.append(“Exception is :\n”).append(ex.getMessage());
Toast.makeText(mContext, builder.toString(), Toast.LENGTH_LONG)
.show();
Looper.loop();
}
}.start();
}
private void handleException(final Thread thread, final Throwable ex) {
Intent intent =new Intent(“per.xch.test2_35.main”);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
}
}
然后在项目中引用
public class CatchApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
CatchHandler.getInstance().init(getApplicationContext());
}
}
注意
<application
android:name=“.CatchApplication”
最后测试下
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new Runnable() {
@Override
public void run() {
throw new NullPointerException(“please catch me! sub thread”);
}
}).start();
throw new NullPointerException(“please catch me! sub thread”);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
之所以在主线程和其他线程采用不同处理方式因为主线程崩溃很大程度上就没的救了。
还有要注意的是intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
原因很简单,源码写的很明白
ContextImpl.java
@Override
public void startActivity(Intent intent) {
if ((intent.getFlags()&Intent.FLAG_ACTIVITY_NEW_TASK) == 0) {
throw new AndroidRuntimeException(
"Calling startActivity() from outside of an Activity "
-
" context requires the FLAG_ACTIVITY_NEW_TASK flag."
-
" Is this really what you want?");
}
mMainThread.getInstrumentation().execStartActivity(
getOuterContext(), mMainThread.getApplicationThread(), null,
(Activity)null, intent, -1);
}
至于怎么把activity怎么变成dialog我就不废话喽,吼,闪人。
原文链接:http://www.eoeandroid.com/thread-197442-1-1.html
更多学习和讨论,欢迎加入我们!
有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。
这里有2000+小伙伴,让你的学习不寂寞~·
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!