[英]Android app working on 2.3 but not on 4.0
好的,我从事Android应用程序已有一段时间了。 基本上是RSS接收者。 我使用RSS检查新闻,天气预报,电视时间表和星座运势。
当我在Android 2.3.3、2.3.6甚至2.1上进行测试时,一切都很好。 但是当我将其发送给装有Android 4.0的朋友时,它无法正常工作。 我可疑,所以我在模拟器上进行了测试。 也不是4.0和4.1仿真器都可以运行它。 在这里,我提供清单和一个类。 如果有人知道如何解决此问题,那将很棒。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="XXX.XXXXX.XXX"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="14" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".Vodic"
android:label="@string/title_activity_pocetna" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Pomoc"
android:label="@string/m_tel_vodi_za_odlu_ne"
></activity>
<activity
android:name=".Pomocna"
android:label="@string/m_tel_vodi_za_odlu_ne"
></activity>
.
.
.
<activity
android:name=".TvRasporedTreca"
android:label="@string/m_tel_vodi_za_odlu_ne"
></activity>
</application>
<uses-permission android:name="android.permission.INTERNET" />
<!-- Needed to check when the network connection changes -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
</manifest>
这是一堂课:
public class Vodic extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pocetna);
Button tv = (Button)findViewById(R.id.tv);
Button vijesti = (Button)findViewById(R.id.vijesti);
Button horoskop = (Button)findViewById(R.id.horoskop);
Button vremenska_prognoza = (Button)findViewById(R.id.vremenska_prognoza);
Button o_aplikaciji = (Button)findViewById(R.id.o_aplikaciji);
Button pomoc = (Button)findViewById(R.id.pomoc);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent fy=new Intent(getApplicationContext(), TV_Raspored.class);
startActivity(fy);
}
});
.
.
.
pomoc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent fy=new Intent(getApplicationContext(), Pomoc.class);
startActivity(fy);
}
});
}
public boolean isOnline() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if(netInfo != null && netInfo.isConnected()) {
return true;
}
return false;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_pocetna, menu);
return true;
}
}
因此,总结一下。 它适用于2.1和2.3.3,但不适用于4.0和4.1。 我不知道怎么了..所以如果有人知道,请帮忙..
从Android 3.x及更高版本开始,Google添加了一些检查,如果您的应用程序采用了非常差的做法,这些检查会产生错误。
没有日志很难确认,但是最有可能的情况是,您将网络操作作为活动的核心,从而生成NetworkOnUIThread异常。
这不是Android框架中的错误。 问题是您的活动在主线程(即UI线程)中运行。
因此,当您在“活动”中进行网络通话时,整个UI都会冻结,直到您得到答案(或超时)为止; 这是您绝对要避免的事情。 解决此问题的一个简单方法是使用AsyncTask :很容易实现内置的解决方案以在辅助线程中进行操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.