Android为什么我的应用程序强制关闭?
我承认,我对安卓这个东西还不熟悉。我正在尝试制作一个应用程序,但随机出现强制关闭错误,我真的不知道为什么。我的应用程序有许多活动,当我启动一个新的活动时,没有一个活动完成()。我从网络上获取数据(通过网络服务和直接图像下载),并且经常使用AsyncTask。大多数情况下,它在异步任务上崩溃。以下是我如何做事的示例:Android为什么我的应用程序强制关闭?,android,android-asynctask,Android,Android Asynctask,我承认,我对安卓这个东西还不熟悉。我正在尝试制作一个应用程序,但随机出现强制关闭错误,我真的不知道为什么。我的应用程序有许多活动,当我启动一个新的活动时,没有一个活动完成()。我从网络上获取数据(通过网络服务和直接图像下载),并且经常使用AsyncTask。大多数情况下,它在异步任务上崩溃。以下是我如何做事的示例: private BackTask backTask; Activity ctx = this; public void onCreate(Bundle savedInsta
private BackTask backTask;
Activity ctx = this;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.trackslist);
backTask = new BackTask();
backTask.execute();
}
protected class BackTask extends AsyncTask<Context, String, myObject>
{
@Override
protected myObject doInBackground(Context... params)
{
try{
if (hasInternet(ctx)==true)
{
//access the web SERVICE here
//initialize myObject WITH result FROM the web
return myObject
}
else
{
return null
}
}catch(Exception ex){
return null;
}
}
@Override
protected void onPreExecute()
{
super.onPreExecute();
}
@Override
protected void onProgressUpdate(String... values)
{
super.onProgressUpdate(values);
}
@Override
protected void onCancelled()
{
super.onCancelled();
}
@Override
protected void onPostExecute( myObject result )
{
super.onPostExecute(result);
if (result==null || result.isEmpty())
{
//no valid result, show a message
}
else
{
//result valid do something with it
}
}
}
@Override
public void onPause()
{
if (backTask!=null && ! backTask.isCancelled())
{
backTask.cancel(true);
}
super.onPause();
}
public void btnStartOnClick(View target) {
Intent intent = new Intent(this, MyNewActivity.class);
startActivity(intent);
}
私有BackTask BackTask;
活动ctx=此;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.trackslist);
backTask=新的backTask();
backTask.execute();
}
受保护的类BackTask扩展了AsyncTask
{
@凌驾
受保护的myObject doInBackground(上下文…参数)
{
试一试{
如果(hasInternet(ctx)=真)
{
//在此处访问web服务
//使用来自web的结果初始化myObject
返回对象
}
其他的
{
返回空
}
}捕获(例外情况除外){
返回null;
}
}
@凌驾
受保护的void onPreExecute()
{
super.onPreExecute();
}
@凌驾
受保护的void onProgressUpdate(字符串…值)
{
super.onProgressUpdate(值);
}
@凌驾
受保护的void onCancelled()
{
super.onCancelled();
}
@凌驾
PostExecute上受保护的void(myObject结果)
{
super.onPostExecute(结果);
if(result==null | | result.isEmpty())
{
//没有有效结果,显示一条消息
}
其他的
{
//你能用它做点什么吗
}
}
}
@凌驾
公共无效暂停()
{
if(backTask!=null&&!backTask.isCancelled())
{
backTask.cancel(true);
}
super.onPause();
}
public void btnStartOnClick(查看目标){
Intent Intent=newintent(这个,MyNewActivity.class);
星触觉(意向);
}
当活动进入暂停()时,任务将被取消。我不确定在try/catch过程中会发生什么,如果出现错误,根据我所做的,它应该返回null,但是我想我错过了一些东西。正如我之前所说,即使我在进行另一项活动,我也会随机得到一个力接近。这真是令人沮丧,因为我不能提供一个有这种行为的应用程序。那么,我做错了什么 您的代码中存在问题。我更正如下:您发现我在调用异步任务时添加了这个。 异步任务接受上下文作为参数,而您没有传递该参数
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.trackslist);
backTask = new BackTask();
backTask.execute(this);
}
您需要在
AsyncTask
类中询问isCancelled()
,然后决定做什么
检查。罗曼·盖伊对此有很好的解释:
您可以停止异步任务。如果你打电话
取消(true),将显示一个中断
发送到后台线程,其中
可能有助于中断任务。
否则,您只需确保
在中定期检查isCancelled()
您的doInBackground()方法。你可以
请参见下面的示例:
code.google.com/p/shelfs
如果有FC,您应该检查日志(“sdk/tools目录中命令行中的adb shell logcat;或Eclipse DDMS视图中的”)。然后将错误日志粘贴到这里。我检查了日志,发现asynctask中存在空指针异常。。。问题是,当我收到消息时,我正在进行另一项活动。我从未使用过执行(这个)。奇怪的是,我没有设法找到任何信息,如果它的要求与否。请你详细说明一下为什么有必要?谢谢。阿林,没必要。您已经将上下文定义为第一个参数“extends AsyncTask”,所以需要传递它。若你们不需要通过任何考试,那个么就把第一个parameteri现在理解的“Void”放在那个里,好的观点。有趣的是,它的工作原理是这样的。如果出现问题,试一试会发生什么?它是否将null返回到onPostExecute?