android中activity无法启动的原因有很多,今日列出一些常见的问题和解决方法,供大家参考

1.未在AndroidManifest.xm文件中注册相应的activity

解决方法:在manifest文件的application节点下添加一个activity标签,注意android:name=“类名”中的类名一定不要拼错了

2.在主线程中进行了联网(如http请求,socket连接等)操作

解决方法a.加上图中被注释掉的两条语句:

StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

解决方法b.创建一个子线程,将联网操作放到该线程中



在子线程中进行联网操作的代码:

import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.os.StrictMode;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;public class ViewSourceCodeActivity extends Activity {private Button buttonSubmit;private EditText editTextPath;private TextView textViewSourceCode;private String text;private String path;private Handler handler;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_view_source_code);buttonSubmit = (Button)findViewById(R.id.buttnSubmit2);editTextPath = (EditText)findViewById(R.id.editTextPath);textViewSourceCode = (TextView)findViewById(R.id.textViewSourceCode);        //StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();        //StrictMode.setThreadPolicy(policy);handler = new Handler(){@Overridepublic void handleMessage(Message message){switch(message.what){case 0:textViewSourceCode.setText(text);break;default:break;}}};        buttonSubmit.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubnew Thread(new Runnable(){@Overridepublic void run() {// TODO Auto-generated method stubpath = editTextPath.getText().toString();if(path.equals("")){//Toast.makeText(ViewSourceCodeActivity.this, "the path is empty", Toast.LENGTH_SHORT).show();}else{try{URL url = new URL(path);HttpURLConnection conn = (HttpURLConnection)url.openConnection();conn.setRequestMethod("GET");conn.setConnectTimeout(5000);if(conn.getResponseCode() == 200) {InputStream is = conn.getInputStream();                            ByteArrayOutputStream bos = new ByteArrayOutputStream();                            byte[] buffer = new byte[1024];                            int len=0 ;                            while((len = is.read(buffer))!=-1){                                bos.write(buffer, 0, len);                            }                            text =bos.toString();                            bos.close();                            is.close();                                                        Message message = new Message();message.what = 0;handler.sendMessage(message);                            //textViewSourceCode.setText(text);}else{//Toast.makeText(ViewSourceCodeActivity.this, "response code error:" + conn.getResponseCode(), Toast.LENGTH_SHORT).show();}}catch(Exception e){if(e instanceof MalformedURLException){//Toast.makeText(ViewSourceCodeActivity.this, "MalformedURLException", Toast.LENGTH_SHORT).show();}else if(e instanceof IOException){////Toast.makeText(ViewSourceCodeActivity.this, "IOException", Toast.LENGTH_SHORT).show();}else{//Toast.makeText(ViewSourceCodeActivity.this, e.toString(), Toast.LENGTH_SHORT).show();}}}}}).start();}});}}

   3.在子线程中更新了UI   

 Android推荐在UI线程中更新UI,以免出现同步的问题,如果在子线程更新UI(如Toast.makeText(), View类的setText()等)可能导致程序崩溃。

解决方法:在子线程中进行一些必要的数据处理,然后将处理结果利用message传递到UI线程中的handler,让handler来更新UI(具体可参考上面的

ViewSourceCodeActivity类。

4.调用了需要申请相关权限的函数而未在androidmanifest文件中申请相关权限

最常见的例子就是进行联网操作时没有申请android.permission.INTERNET权限

解决方法:只需在manifest文件中添加相应的权限声明即可,如:


android中常见的一些权限如下所示:

ACCESS_NETWORK_STATE                 网络状态权限    

ACCESS_WIFI_STATE                    WIFI网络状态信息权限    

BATTERY_STATE                        电池状态权限    

BLUETOOTH                           连接匹配的蓝牙设备权限    

BLUETOOTH_ADMIN                     发现匹配的蓝牙设备权限    

BROADCAST_SMS                       广播收到短信提醒的权限    

CALL_PHONE                         拨打电话的权限    

CAMERA                              使用相机的权限    

CHANGE_NETWORK_STATE              改变网络状态权限    

CHANGE_WIFI_STATE               改变wifi网络状态权限    

DELETE_CACHE_FILES         允许删除缓存文件权限    

DELETE_PACKAGES               允许删除安装包的权限    

FLASHLIGHT                 访问闪光灯的权限    

INTERNET                   允许访问网络的权限    

MODIFY_AUDIO_SETTINGS     允许修改全局声音的权限    

PROCESS_OUTGOING_CALLS    允许监听、控制、取消呼出电话的权限    

READ_CONTACTS              允许读取电话薄的权限    

READ_HISTORY_BOOKMARKS    读取浏览器收藏夹和历史记录的权限    

READ_OWNER_DATA             允许读取用户数据的权限    

READ_PHONE_STATE        允许读取手机状态的权限   

READ_PHONE_SMS            允许读取短信息的权限    

REBOOT                 允许重启系统的权限    

RECEIVE_MMS             允许处理、监控、接受彩信的权限    

RECEIVE_SMS            允许处理、监控、接受短信的权限    

RECORD_AUDIO           允许录音的权限    

SEND_SMS               允许发送短信的权限    

SET_ORIENTATION            设置屏幕方向权限    

SET_TIME               设置时间权限    

SET_TIME_ZONE         允许设置时区的权限    

SET_WALLPAPER           设置桌面壁纸权限    

VIBRATE                   允许控制振动器的权限    

WRITE_CONTACTS               允许写用户联系人的权限    

WRITE_HISTORY_BOOKMARKS        允许应用程序写历史记录和书签的全新    

WRITE_OWNER_DATA                允许应用程序写用户数据的权限    

WRITE_SMS                        允许写短信的权限    


更多相关文章

  1. Android开发资料:Android启动优化解析
  2. Android(安卓)IntentService的使用与源码解析
  3. 详解Android(安卓)中AsyncTask 的使用
  4. 怎样在android中添加背景图片?
  5. Android应用程序入口和出口(sundy深入浅出)之进程和线程
  6. 每个Android开发者必须知道的资源集锦
  7. android 面试相关资料
  8. Android线程阻塞处理及优化
  9. Android(安卓)MP3录音实现

随机推荐

  1. Android(安卓)Mvp模式详解(Kotlin篇)
  2. Android配置build.gradle的buildTypes动
  3. adb调试工具
  4. Android(安卓)SQLite分析
  5. 【Android游戏开发十四】深入Animation,
  6. android 自定义控件 自定义属性详细介绍
  7. android多线程模型和service分析
  8. android中图片的三级cache策略(内存、文件
  9. Android中的手势交互
  10. android 动画分析