0

我开发了一个导游应用程序。一些类有帧动画。3 个带有帧动画的活动效果很好。但是如果单击另一个类似的活动,则会出现内存泄漏错误。图像从 Drawables 文件夹加载。整个可绘制文件夹包含 3.58 MB。我不明白为什么它会给出这个错误。请帮助解决这个问题。提前致谢。

这是我的日志猫。

08-18 10:45:14.585: E/dalvikvm-heap(9523): 6444816 字节分配内存不足。

prio=5 tid=1 可运行 08-18 10:45:14.585: I/dalvikvm(9523): | group="main" sCount=0 dsCount=0 obj=0x41e46578 self=0x41cc9938 08-18 10:45:14.585: I/dalvikvm(9523): | sysTid=9523 nice=-16 sched=0/0 cgrp=apps handle=1074774012 08-18 10:45:14.585: I/dalvikvm(9523): | state=R schedstat=(4068370710 523035518 4253) utm=308 stm=98 core=0

08-18 10:45:14.585: I/dalvikvm(9523): 在 android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:596)

08-18 10:45:14.585: I/dalvikvm(9523): 在 android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)

08-18 10:45:14.585: I/dalvikvm(9523): 在 android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:832)

08-18 10:45:14.585: I/dalvikvm(9523): 在 android.content.res.Resources.loadDrawable(Resources.java:2988) android.content.res.TypedArray.getDrawable(TypedArray.java:602) 08 -18

android.widget.ImageView.(ImageView.java:131) 08-18

android.widget.ImageView.(ImageView.java:121) 08-18

java.lang.reflect.Constructor.constructNative(Native Method) 08-18

java.lang.reflect.Constructor.newInstance(Constructor.java:417) 08-18

android.view.LayoutInflater.createView(LayoutInflater.java:600) 08-18 10:45:14.585: I/dalvikvm(9523): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56 ) 08-18 10:45:14.585: I/dalvikvm(9523): 在 android.view.LayoutInflater.onCreateView(LayoutInflater.java:675)

android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:700)

android.view.LayoutInflater.rInflate(LayoutInflater.java:761) 08-18

android.view.LayoutInflater.rInflate(LayoutInflater.java:769) 08-18

android.view.LayoutInflater.inflate(LayoutInflater.java:498) 08-18

android.view.LayoutInflater.inflate(LayoutInflater.java:398) 08-18

android.view.LayoutInflater.inflate(LayoutInflater.java:354) 08-18

com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:361) 08-18 10:45:14.585: I/dalvikvm(9523): 在

D / AndroidRuntime(9523):关闭VM 08-18 10:45:14.590:W / dalvikvm(9523):threadid = 1:线程退出但未捕获异常(组= 0x41e45700)08-18 10:45:14.595:E /AndroidRuntime(9523): 致命异常: main 08-18 10:45:14.595: E/AndroidRuntime(9523): java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.isuru.allaboutkataragama/com.isuru.allaboutkataragama. Kabiliththa_Dewalaya}:android.view.InflateException:二进制 XML 文件第 53 行:膨胀类 08-18 10:45:14.595 时出错:E/AndroidRuntime(9523):

com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)

android.view.LayoutInflater.onCreateView(LayoutInflater.java:675) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:700) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:761) 08-18 在 android。 view.LayoutInflater.rInflate(LayoutInflater.java:769) 08-18 at android.view.LayoutInflater.inflate(LayoutInflater.java:498) 08-18 at android.view.LayoutInflater.inflate(LayoutInflater.java:398) 08- 18 在 android.view.LayoutInflater.inflate(LayoutInflater.java:354) 08-18 在 com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:361) 在 android.app.Activity.setContentView(Activity .java:1956) 08-18 在 com.isuru.allaboutkataragama.Kabiliththa_Dewalaya.onCreate(Kabiliththa_Dewalaya.java:57) 在 android.app.Activity.performCreate(Activity.java:5372) 08-18 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257)

10:45:14.595:E/AndroidRuntime(9523):由:java.lang.reflect.InvocationTargetException 08-18 10:45:14.595:E/AndroidRuntime(9523):在 java.lang.reflect.Constructor.constructNative(本机方法)08-18 在 java.lang.reflect.Constructor.newInstance(Constructor.java:417) 08-18 在 android.view.LayoutInflater.createView(LayoutInflater.java:600) 08-18

E/AndroidRuntime(9523):引起:java.lang.OutOfMemoryError 08-18

android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 08-18

android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:596)

android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)

android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:832)

android.content.res.Resources.loadDrawable(Resources.java:2988) 08-18

android.content.res.TypedArray.getDrawable(TypedArray.java:602) 08-18

android.widget.ImageView.(ImageView.java:131) 08-18

android.widget.ImageView.(ImageView.java:121)

这是我的代码

public class Kabiliththa_Dewalaya extends FragmentActivity implements LocationListener{

    GoogleMap mGoogleMap;
    ArrayList<LatLng> mMarkerPoints;
    double mLatitude=0;
    double mLongitude=0;
    ImageView iv1,iv2,iv3;
    Button contact_kebiliththa;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.kebiliththa);

         BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeResource(getResources(), R.id.imageView1_kabiliththa, options);
            BitmapFactory.decodeResource(getResources(), R.id.imageView1_kebiMap, options);
            BitmapFactory.decodeResource(getResources(), R.id.imageView1_kabiliththa2, options);
            int imageHeight = options.outHeight;
            int imageWidth = options.outWidth;
            String imageType = options.outMimeType;

            iv1.setImageBitmap(decodeSampledBitmapFromResource(getResources(), R.id.imageView1_kabiliththa, 100, 100));
            iv2.setImageBitmap(decodeSampledBitmapFromResource(getResources(), R.id.imageView1_kebiMap, 100, 100));
            iv2.setImageBitmap(decodeSampledBitmapFromResource(getResources(), R.id.imageView1_kabiliththa2, 100, 100));
            contact_kebiliththa=(Button) findViewById(R.id.button_contactKebiliththa);
            contact_kebiliththa.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    Intent callIntent = new Intent(Intent.ACTION_CALL);
                    callIntent.setData(Uri.parse("tel:"+"0773539292"));
                    startActivity(callIntent);

                }
            });

        // Getting Google Play availability status
        int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());

        if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available

            int requestCode = 10;
            Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
            dialog.show();

        }else { // Google Play Services are available

            // Initializing 
            mMarkerPoints = new ArrayList<LatLng>();

            // Getting reference to SupportMapFragment of the activity_main
            SupportMapFragment fm = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map_kabiliththa);

            // Getting Map for the SupportMapFragment
            mGoogleMap = fm.getMap();
            CameraPosition cameraPosition = new CameraPosition.Builder().target(new LatLng(
                    6.418266, 81.324671)).zoom(8).build();

            mGoogleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

            double Kabiliththalatitude =6.513917;
            double Kabiliththalongitude =81.691930;

            final LatLng Kabiliththa=new LatLng(Kabiliththalatitude, Kabiliththalongitude );
            Marker Kabiliththa_marker=mGoogleMap.addMarker(new MarkerOptions().title("Kabiliththa Dewalaya").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ROSE)).position(Kabiliththa));
            Kabiliththa_marker.showInfoWindow();

            // Enable MyLocation Button in the Map
            mGoogleMap.setMyLocationEnabled(true);


            // Getting LocationManager object from System Service LOCATION_SERVICE
            LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

            // Creating a criteria object to retrieve provider
            Criteria criteria = new Criteria();

            // Getting the name of the best provider
            String provider = locationManager.getBestProvider(criteria, true);

            // Getting Current Location From GPS
            Location location = locationManager.getLastKnownLocation(provider);

            if(location!=null){
                onLocationChanged(location);
            }

            locationManager.requestLocationUpdates(provider, 20000, 0, this);           

          mGoogleMap.setOnMarkerClickListener(new OnMarkerClickListener() {

            @Override
            public boolean onMarkerClick(Marker m) {
                mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(m.getPosition(), 17));
                m.remove();
                Toast.makeText(getApplicationContext(), "Tap again in the location",
                           Toast.LENGTH_LONG).show();

                // Setting onclick event listener for the map
                mGoogleMap.setOnMapClickListener(new OnMapClickListener() {

                    @Override
                    public void onMapClick(LatLng point) {

                        // Already map contain destination location 
                        if(mMarkerPoints.size()>1){

                            FragmentManager fm = getSupportFragmentManager();   
                            mMarkerPoints.clear();
                            mGoogleMap.clear();
                            LatLng startPoint = new LatLng(mLatitude, mLongitude);
                            drawMarker(startPoint);
                        }

                        drawMarker(point);

                        // Checks, whether start and end locations are captured
                        if(mMarkerPoints.size() >= 2){                  
                            LatLng origin = mMarkerPoints.get(0);
                            LatLng dest = mMarkerPoints.get(1);

                            // Getting URL to the Google Directions API
                            String url = getDirectionsUrl(origin, dest);                

                            DownloadTask downloadTask = new DownloadTask();

                            // Start downloading json data from Google Directions API
                            downloadTask.execute(url);
                        }                   
                    }
                });     

                return false;
            }
        });


        }       
    }

    private String getDirectionsUrl(LatLng origin,LatLng dest){

        // Origin of route
        String str_origin = "origin="+origin.latitude+","+origin.longitude;

        // Destination of route
        String str_dest = "destination="+dest.latitude+","+dest.longitude;          

        // Sensor enabled
        String sensor = "sensor=false";         

        // Building the parameters to the web service
        String parameters = str_origin+"&"+str_dest+"&"+sensor;

        // Output format
        String output = "json";

        // Building the url to the web service
        String url = "https://maps.googleapis.com/maps/api/directions/"+output+"?"+parameters;      

        return url;
    }

    /** A method to download json data from url */
    private String downloadUrl(String strUrl) throws IOException{
        String data = "";
        InputStream iStream = null;
        HttpURLConnection urlConnection = null;
        try{
                URL url = new URL(strUrl);

                // Creating an http connection to communicate with url 
                urlConnection = (HttpURLConnection) url.openConnection();

                // Connecting to url 
                urlConnection.connect();

                // Reading data from url 
                iStream = urlConnection.getInputStream();

                BufferedReader br = new BufferedReader(new InputStreamReader(iStream));

                StringBuffer sb  = new StringBuffer();

                String line = "";
                while( ( line = br.readLine())  != null){
                        sb.append(line);
                }

                data = sb.toString();

                br.close();

        }catch(Exception e){
                Log.d("Exception while downloading url", e.toString());
        }finally{
                iStream.close();
                urlConnection.disconnect();
        }
        return data;
     }



    /** A class to download data from Google Directions URL */
    private class DownloadTask extends AsyncTask<String, Void, String>{         

        // Downloading data in non-ui thread
        @Override
        protected String doInBackground(String... url) {

            // For storing data from web service
            String data = "";

            try{
                // Fetching the data from web service
                data = downloadUrl(url[0]);
            }catch(Exception e){
                Log.d("Background Task",e.toString());
            }
            return data;        
        }

        // Executes in UI thread, after the execution of
        // doInBackground()
        @Override
        protected void onPostExecute(String result) {           
            super.onPostExecute(result);            

            ParserTask parserTask = new ParserTask();

            // Invokes the thread for parsing the JSON data
            parserTask.execute(result);

        }       
    }

    /** A class to parse the Google Directions in JSON format */
    private class ParserTask extends AsyncTask<String, Integer, List<List<HashMap<String,String>>> >{

        // Parsing the data in non-ui thread        
        @Override
        protected List<List<HashMap<String, String>>> doInBackground(String... jsonData) {

            JSONObject jObject; 
            List<List<HashMap<String, String>>> routes = null;                     

            try{
                jObject = new JSONObject(jsonData[0]);
                DirectionsJSONParser parser = new DirectionsJSONParser();

                // Starts parsing data
                routes = parser.parse(jObject);    
            }catch(Exception e){
                e.printStackTrace();
            }
            return routes;
        }

        // Executes in UI thread, after the parsing process
        @Override
        protected void onPostExecute(List<List<HashMap<String, String>>> result) {
            ArrayList<LatLng> points = null;
            PolylineOptions lineOptions = null;

            // Traversing through all the routes
            for(int i=0;i<result.size();i++){
                points = new ArrayList<LatLng>();
                lineOptions = new PolylineOptions();

                // Fetching i-th route
                List<HashMap<String, String>> path = result.get(i);

                // Fetching all the points in i-th route
                for(int j=0;j<path.size();j++){
                    HashMap<String,String> point = path.get(j);                 

                    double lat = Double.parseDouble(point.get("lat"));
                    double lng = Double.parseDouble(point.get("lng"));
                    LatLng position = new LatLng(lat, lng); 

                    points.add(position);                       
                }

                // Adding all the points in the route to LineOptions
                lineOptions.addAll(points);
                lineOptions.width(6);
                lineOptions.color(Color.RED);   

            }

            // Drawing polyline in the Google Map for the i-th route
            mGoogleMap.addPolyline(lineOptions);                            
        }           
    }   



    private void drawMarker(LatLng point){
        mMarkerPoints.add(point);

        // Creating MarkerOptions
        MarkerOptions options = new MarkerOptions();

        // Setting the position of the marker
        options.position(point);

        /** 
         * For the start location, the color of marker is GREEN and
         * for the end location, the color of marker is RED.
         */
        if(mMarkerPoints.size()==1){
            options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
        }else if(mMarkerPoints.size()==2){
            options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
        }

        // Add new marker to the Google Map Android API V2
        mGoogleMap.addMarker(options);      
    }

    @Override
    public void onLocationChanged(Location location) {
        // Draw the marker, if destination location is not set
        if(mMarkerPoints.size() < 2){

            mLatitude = location.getLatitude();
            mLongitude = location.getLongitude();
            LatLng point = new LatLng(mLatitude, mLongitude);

            mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(point));
            mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(8));        

            drawMarker(point);          
        } 

    }

    public static int calculateInSampleSize(
            BitmapFactory.Options options, int reqWidth, int reqHeight) {
    // Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;

    if (height > reqHeight || width > reqWidth) {

        // Calculate ratios of height and width to requested height and width
        final int heightRatio = Math.round((float) height / (float) reqHeight);
        final int widthRatio = Math.round((float) width / (float) reqWidth);

        // Choose the smallest ratio as inSampleSize value, this will guarantee
        // a final image with both dimensions larger than or equal to the
        // requested height and width.
        inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
    }

    return inSampleSize;
}

    public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
            int reqWidth, int reqHeight) {

        // First decode with inJustDecodeBounds=true to check dimensions
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeResource(res, resId, options);

        // Calculate inSampleSize
        options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;
        return BitmapFactory.decodeResource(res, resId, options);
    }


    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub      
    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub      
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub      
    }


}

我的xml布局

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/RootView" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/textView_kebilithta"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingBottom="10dp"
            android:paddingLeft="65dp"
            android:paddingTop="10dp"
            android:text="@string/Kebiliththa_header"
            android:textColor="#000033"
            android:textSize="18sp"
            android:textStyle="bold" />

        <ImageView
            android:id="@+id/imageView1_kabiliththa"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:adjustViewBounds="true"
            android:contentDescription="@string/imageVw"
            android:src="@drawable/kabi5" />

        <TextView
            android:id="@+id/textView_kebilithta1"
            android:layout_width="wrap_content"
            android:layout_height="122dp"
            android:paddingLeft="5dp"
            android:paddingTop="10dp"
            android:text="@string/Kebiliththa_description1"
            android:textSize="15sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/textView_kebilithta2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="5dp"
            android:paddingTop="5dp"
            android:text="@string/Kebiliththa_decrip2"
            android:textSize="15sp"
            android:textStyle="bold" />

        <ImageView
            android:id="@+id/imageView1_kabiliththa2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:adjustViewBounds="true"
            android:contentDescription="@string/imageVw"
            android:src="@drawable/kabi1" />

        <TextView
            android:id="@+id/textView_kebilithta4"
            android:layout_width="wrap_content"
            android:layout_height="99dp"
            android:paddingLeft="5dp"
            android:paddingTop="5dp"
            android:text="@string/Kebiliththa_descrip4"
            android:textSize="15sp"
            android:textStyle="bold" />

        <ImageView
            android:id="@+id/imageView1_kebiMap"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:adjustViewBounds="true"
            android:contentDescription="@string/imageVw"
            android:paddingTop="5dp"
            android:src="@drawable/kebiliththa_map" />

        <TextView
            android:id="@+id/textView_kebilithta41"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="5dp"
            android:paddingTop="12dp"
            android:text="@string/Kebiliththa_troute_1_header"
            android:textSize="17sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/textView_kebilithta42"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="5dp"
            android:paddingTop="2dp"
            android:text="@string/Kebiliththa_route1"
            android:textSize="15sp" />

        <TextView
            android:id="@+id/textView_kebilithta43"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="5dp"
            android:paddingTop="13dp"
            android:text="@string/Kebiliththa_troute_2_header"
            android:textSize="17sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/textView_kebilithta44"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="5dp"
            android:paddingTop="2dp"
            android:text="@string/Kebiliththa_route2"
            android:textSize="15sp" />

        <TextView
            android:id="@+id/textView_kebilithta45"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="5dp"
            android:paddingTop="13dp"
            android:text="@string/Kebiliththa_troute_3_header"
            android:textSize="17sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/textView_kebilithta46"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="5dp"
            android:paddingTop="2dp"
            android:text="@string/Kebiliththa_route3"
            android:textSize="15sp" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            android:padding="12dp" >

            <ImageView
                android:id="@+id/imageView_contactKabi"
                android:layout_width="54dp"
                android:layout_height="match_parent"
                android:contentDescription="@string/imageVw"
                android:paddingTop="6dp"
                android:src="@drawable/phone" />

            <Button
                android:id="@+id/button_contactKebiliththa"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="#000033"
                android:text="@string/Kebiliththa_tours"
                android:textColor="#FFFFFF"
                android:textStyle="bold" />
        </LinearLayout>

        <TextView
            android:id="@+id/textView_dire"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="5dp"
            android:paddingTop="25dp"
            android:text="@string/getDirections1"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/textView_markerDire"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingBottom="10dp"
            android:paddingLeft="5dp"
            android:text="@string/markerTap"
            android:textColor="#FF0000" />

        <fragment
            android:id="@+id/map_kabiliththa"
            android:layout_width="match_parent"
            android:layout_height="470dp"
            android:layout_weight="0.50"
            class="com.google.android.gms.maps.SupportMapFragment" />
    </LinearLayout>

</ScrollView>

动画列表

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" >

     <item
        android:drawable="@drawable/kiri2"
        android:duration="10000"/>

     <item
        android:drawable="@drawable/kiri10"
        android:duration="8500"/>

     <item
        android:drawable="@drawable/kiriwehera8"
        android:duration="8500"/>


    <item
        android:drawable="@drawable/kiri9"
        android:duration="8500"/>

    <item
        android:drawable="@drawable/kiriwehera5"
        android:duration="8500"/>

      <item
        android:drawable="@drawable/kiriwehera6"
        android:duration="8500"/>
    <item
        android:drawable="@drawable/kiriwehera7"
        android:duration="9000"/>

</animation-list>
4

0 回答 0