疑問:Android界面刷新方法
Android 如果返回前面的Activity時能自動更新(刷新)
解答:
第一種方法:
引用函數 setResult和 onActivityResult處理機制
A窗體AActivity和B窗體BActivity,A進入B窗體,然後B窗體返回A窗體並要實現B窗體的界面更新
A窗體需要添加代碼:
//切換到B窗體
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(AActivity.this,BActivity.class);
Bundle bundle = new Bundle();
bundle.putString("uid", AActivity.this.toString());
intent.putExtras(bundle);
startActivityForResult(intent,GET_CODE);
}
//重構方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(requestCode == GET_CODE)
{
}
}
B窗體需要添加代碼:
//B窗體結束,返回A窗體
@Override
public void onClick(View v)
{
setResult(RESULT_OK,(new Intent()).setAction(uid));
finish();
}
疑問:Android消息推送機制
Android經常需要APP程序與服務器同步最新數據,並通過聲音或者圖標提醒用戶,一般服務器與客戶端同步數據分兩種,第一種是客戶端使用Pull(拉)的模式,隔一段時間就去服務器上獲取信息,看是否有更新的信息出現。第二種就是 服務器使用Push(推送)的模式,當服務器端有新信息了,則把最新的信息Push到客戶端上。
如果能實現Push(推送)模式的話就最理想化,不需要客戶端定時的去監聽服務器的數據,省流量並且用戶體驗好。
解答:
疑問:Android文字或字體(Textview)加下劃線
比如登陸界面中的“忘記密碼”一般都有下劃線,怎麼添加?
解答:
有兩種方法:
1)textView.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG)
2)textView.setText(Html.fromHtml("<u>找回密碼</u>"))
第一種效果不好,會出現鋸齒狀的字體,還是採用第二種方法。
疑問:Android手機訪問IP地址的webservice網絡失敗
部署過一個webservice,但因爲沒有域名,所以地址就用IP地址組成,但很多手機訪問的時候出現網絡連接失敗。而且SDK低版本的可以訪問,高版本的不能連接。
android.os.NetworkOnMainThreadException
解答:
懷疑1:初步判斷應該是手機安全或管理軟件(91助手)屏蔽了IP地址形式訪問外網,或者從IP地址外網獲取數據
懷疑2:根據反饋情況,android4.0以上的訪問都有問題,所以懷疑調用webservice的開發包ksoap2-android-assembly-2.4-jar-with-dependencies.jar需要更新爲最新版本,版本有點老
懷疑3:android4.0系統不允許主線程(UI線程)訪問網絡
最終判斷是懷疑3的問題,所以在初始化界面加如下代碼就OK了:
if (version >= 11){
//android3.0後調用webservice需要加這段代碼
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // or .detectAll() for all detectable problems
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
//.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
}
疑問:Android界面緩衝
緩衝界面具有進入應用時判斷網絡、獲取平臺數據、展示logo等功能,因此在android應用中登陸之前使用圖片或者動畫做緩衝界面
解答:
public class AppStart extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final View view = View.inflate(this, R.layout.start, null);
setContentView(view);
//漸變展示啓動屏
AlphaAnimation aa = new AlphaAnimation(0.3f,1.0f);
aa.setDuration(3000);
view.startAnimation(aa);
aa.setAnimationListener(new AnimationListener()
{
@Override
public void onAnimationEnd(Animation arg0) {
redirectTo();
}
@Override
public void onAnimationRepeat(Animation animation) {}
@Override
public void onAnimationStart(Animation animation) {
}
});
}
/**
* 跳轉到...
*/
private void redirectTo(){
Intent intent = new Intent(this, Login.class);
startActivity(intent);
finish();
}
}
疑問:Android怎麼讀取硬件設備信息
解答:
作者:水煮魚
出處:http://blog.csdn.net/sheshou2/