代码适用于Gingerbread(2.3.6)而不适用于ICS(4.0.4)

时间:2013-01-10 13:23:31

标签: android android-4.0-ice-cream-sandwich

  • 我有一个应用程序是在Android 2.3.6及之前开发和测试的 以下。它工作正常。
  • 我使用Android 4.0.4在我的新Micromax A110上运行应用程序,当我从活动A启动活动B并按下后退按钮(或来自A的活动C / D / E)时,它会崩溃,并显示以下错误日志 VV
  

01-10 18:35:44.372:E / AndroidRuntime(18378):致命异常:Timer-1   01-10 18:35:44.372:E / AndroidRuntime(18378):   java.lang.IllegalStateException:必须从主线程调用   process 01-10 18:35:44.372:E / AndroidRuntime(18378):at   android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1373)   01-10 18:35:44.372:E / AndroidRuntime(18378):at   android.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:437)   01-10 18:35:44.372:E / AndroidRuntime(18378):at   android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:454)   01-10 18:35:44.372:E / AndroidRuntime(18378):at   android.app.Activity.onBackPressed(Activity.java:2134)01-10   18:35:44.372:E / AndroidRuntime(18378):at   com.vwap.friends.MygoBack(MyDialog.java:90)01-10 18:35:44.372:   E / AndroidRuntime(18378):at   com.vwap.friends.MyDialog $ 3.run(MyDialog.java:83)01-10   18:35:44.372:E / AndroidRuntime(18378):at   java.util.Timer中$ TimerImpl.run(Timer.java:284)

  • 我完全没有意识到片段的概念(我计划尽快处理),看起来错误与它有关。

我不知道从哪里开始。我首先阅读有关Fragments的内容,还是可以快速修复此问题并发布我的应用程序?

3 个答案:

答案 0 :(得分:2)

您正在主线程上执行网络操作。如果您的目标SDK为11或更高,则会抛出NetworkOnMainThreadException,因为此行为可能会阻止用户界面并导致应用无响应。

您可以使用AsyncTask解决此问题,将数据加载到doInBackground(..)

答案 1 :(得分:1)

  

尝试使用 runOnUiThread(Runnable    的动作)。

您还可以尝试处理程序

final Runnable YOURVIEW = new Runnable()
{
    public void run() 
    {
        SampleMethod(); // Put your Method What you want change
        handler.postDelayed(this, timeout);
    }
};

handler.postDelayed(changeView, timeout);

答案 2 :(得分:0)

即使我遇到类似的问题,但我认为您必须包含android_support_v4.jar文件才能兼容所有Android版本。